TLS和SSL协议详解

本文详细介绍了SSL和TLS

2025年 08月04日 19:15 星期一
2860 字 · 16 分钟

后端php

我们来个登录页面,简单感受一下前后端的交互。

checklogin.php

PLAINTEXT
<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>论坛</title>
 </head>
 <body>
 <?php
 $uname = $_GET['username'];
 $pwd = $_GET['password'];
 if ($uname == 'jaden'){
 echo "<h1>欢迎 $uname 回来</h1>";
 echo "<h2>您的密码为: $pwd</h2>";
 }else {
 echo "<h1>sorry,用户名或者密码不正确!</h1>";
 };
 ?>
 </body>
</html>

login.html

PLAINTEXT
<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>kaku小站</title>
 </head>
 <body>
 <form action='checklogin.php' method='get'>
 用户名: <input type='text' name='username'>
 密码: <input type='password' name='password'>
 <input type='submit'>
 </form>
 </body>
</html>

php简介

SHELL
#PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。
#定义一个变量,前面不加$符号,那么就是普通字符
$num = 3.1415;
$a = 5;
$b = 6;
echo $a + $b;
$hello world
# 定义常量:
# 常量的名一般都是大写字母
方式1:define('常量名', '常量值');  例如:define('WebSite', 'php中文网');
方式2:const 常量名 = 常量值;  例如:const FOO = 'BAR';
方式2不能用在if判断中。

变量的命名规则

SHELL
1.一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。
2.变量名不能以数字开头
3.变量名不要出现中文
4.变量名不要出现非下划线的其他特殊符号 
5.变量名建议使用小写字母

不带符号,单引号,双引号的区别

PHP
<?php
header("Content-Type: text/html; charset=utf-8");  // 在响应头中添加了content-type: utf-8,header()是php提供的加工响应头键值对的
// header("jaden: 666"); 
$name = 'kobe';
echo $name;
echo '最喜欢的NBA球星是'.$name.'<br>';  //变量不加符号,遇到字符串拼接,需要加.连接
echo '最喜欢的NBA球星是$name<br>';      //单引号,不解析变量,原样输出
echo "最喜欢的NBA球星是$name<br>";      //双引号,解析变量
?>

php的数据结构

SHELL
◾布尔类型 0 非0 |false true  # 判断条件的结果都是布尔值
◾整型   整数 -99999 +99999
◾浮点型 小数 -1.9 3.25 3.00005
◾字符串 'hello'  "hello"
◾数组  array,  例如:$d = array('a', 1,'c',array(1,2,3)); #数组是容器类型的数据,可以
存放各种类型的基础数据
 $d = array('a', 1,'c',array(1,2,3));
 echo $d; # 会报错,因为echo是用来输出字符串类型数据的。
 echo $d[0];  # 数组类型是可以通过索引取值的,索引是从0开始的。
◾对象  object  # 这个需要学到类之后才能看到
◾资源类型 Resource  # 文件等资源数据
◾NULL  空  # $a = null; 提前定义,但是不想赋值的时候就可以这样用
    
查看变量对应值的类型:
 1.使用“gettype(传入一个变量var)”来显示变量var的类型;  只会显示类型
 2.使用“var_dump(传入一个变量var)”来显示变量var的类型;  会显示具体内容
打印array:
    $a = array(1,2,3);
 print_r($a);

php的运算符

算术运算符

运算符名称描述示例结果
x+yx和y的和2+24
x-yx和y的差5-23
x*yx和y的积5*210
x/yx和y的商15/53
x%yx除以y的余数5 % 2 10 % 8 10 % 21 2 0
-x负数x取负数-2
a.b并置连续两个字符串”Hi” . “Ha”HiHa

存在优先级 (乘除 > 加减),提升优先级就加括号。

自增自减

运算符名称描述
++$x预递增x 加 1,然后返回 x
$x++后递减返回 x,然后 x 加 1
—$x预递减x 减 1,然后返回 x
$x—后递减返回 x,然后 x 减 1

比较运算符

image-20250905113128375

image-20250905113133793

逻辑运算符

image-20250905113418666

三元运算符

SHELL
判断条件?真的处理:假的处理
判断如果为true,那么执行真处理,也就是:冒号前面的代码会执行,否则:冒号后面的执行,和if..else差
不多,不过更简洁一些,但是不能执行多条件判断
PHP
<?php
    $x = true;
    $x ? $y = 5 : $y = 6;
    //输出5
    echo  $y;
?>

php流程控制

if else

PHP
<?php
// A B C 其他
$jixiao='F';
if ($jixiao == 'A'){
 echo "发放1.2倍薪资";
} elseif ( $jixiao =='B'){
 echo "正常发放薪资";
}else if($jixiao == 'C'){
 echo "发放90%薪资";
}else {
    echo "发放80%薪资";
}
?>

while

条件不成立,一次都不执行

PHP
<?php
$i = 1;
while ($i <= 10) {
 $i++;
    echo '哈哈'.$i.'次'; 
}
?>

do while

条件不成立,也会执行一次

PHP
<?php
$i = 0;
do {
   echo $i;
} while ($i > 0);
?>

for

有限循环

PHP
#$i=1初始值,$i<=10 条件,$i++每次加1
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

foreach

遍历数组

PHP
# 数组的索引默认是从0开始的数字,也可以自行指定索引
$cars=array("特等奖"=>"布加迪","一等奖"=>"捷豹" ,"二等奖"=>"法拉利" ,"三等奖"=>"玛莎拉
蒂");
foreach ($cars as $key => $value) {
    echo "<tr><td>$key</td><td>$value</td></tr>";
}

break打断

打断循环;结束循环

PHP
$cars=array("特等奖"=>"布加迪","一等奖"=>"捷豹" ,"二等奖"=>"法拉利" ,"三等奖"=>"玛莎拉蒂"
,"四等奖"=>"迈凯伦");
foreach ($cars as $key => $value) {
 if ( $key == '三等奖' ){
 break;
 } else {
    echo $key."是".$value."<br>";
 }
}

continue继续

跳出本轮,开始下一轮

PHP
$cars=array("特等奖"=>"布加迪","一等奖"=>"捷豹" ,"二等奖"=>"法拉利" ,"三等奖"=>"玛莎拉蒂"
,"四等奖"=>"迈凯伦");
foreach ($cars as $key => $value) {
 if ( $key == '三等奖' ){
 continue;
 } else {
    echo $key."是".$value."<br>";
 }
}

switch

条件判断

PHP
$a=5;
$b=10;
$c=4;  
//
switch ($c) {
    case 1:
        echo "$a + $b = ".($a+$b)."<br>";
        break;
    case 2:
        echo "$a - $b = ".($a-$b)."<br>";
        break;
    case 3:
        echo "$a * $b = ".($a*$b)."<br>";
        break;
 case 4:
    echo "$a / $b = ".($a/$b)."<br>";
 break;
    default: // 条件都不成立时执行
        echo '原来啥也不是';
        break;
}

php的函数

语法

PHP
//不支持传参的函数
function welcom(){
 echo "欢迎光临!";
}
//调用函数
welcom();
<?php
header("Content-Type: text/html; charset=utf-8");  // 在响应头中添加了content-type: utf-8,header()是php提供的加工响应头键值对的
echo '做一下加法计算!'.'<br>';
// 函数声明,提前定义了两个形式参数:$a, $b
function add($a, $b){
 //$a = 2;
 //$b = 3;
 $c = $a + $b;
 echo '加法计算结果为:'.$c.'<br>';
 
}
// 函数调用: 3,4实际参数
add(3,4);
 
echo '计算结束..'.'<br>';
?>
//返回值
// 函数声明,提前定义了两个形式参数:$a, $b
function add($a, $b){
 //$a = 2;
 //$b = 3;
 $c = $a + $b;
 // echo '加法计算结果为:'.$c.'<br>';
 return $c;
 
}
// 函数调用: 3,4实际参数
$ret = add(3,4);
echo $ret.'<br>';
 
echo '计算结束..'.'<br>';

内置函数

文件包含函数

函数包含失败特点
include返回一条警告文件继续向下执行。通常用于动态包含
require一个致命错误代码就不会继续向下执行。通常包含极为重要的文件
include_once(pass)返回一条警告如果文件曾经已经被被包含过,不再包含
require_once(pass)一个致命错误除了原的功能一外,会做一次once检测,防止文件反复被包含

数学常用函数

函数名描述示例
abs()求绝对值$abs = abs(-4.2);//4.2
ceil()进一法取整echo ceil(9.001); // 10
floor()舍去法取整echo floor(9.999); // 9
fmod()浮点数取余;r=fmod(r = fmod(5.7 1.3);// 0.5
pow()返回数的n次方echo pow(-1, 20); // 1
round()浮点数四舍五入echo round(1.95583, 2);// 1.96
sqrt()求平方根echo sqrt(9); //3
max()求最大值echo max(1, 3, 5, 6, 7); // 7
mt_rand()更好的随机数echo mt_rand(0,9);//n
rand()随机数echo rand()
pi()获取圆周率echo pi(); // 3.1415926535898

字符串常用函数

echo __FILE__; 打印当前文件的绝对路径。

image-20250905161525131

image-20250905161544357

时间日期函数

中国的时区在东八区。时间相关函数:date()、getdate()、time(),我们就说一下这三个吧。

PHP
// 时区的报错,修改php.ini,date.timezone = Asia/Shanghai
$d = date('Ymd H:i:s');  # 格式化时间日期的。
$d = date('Ymd H:i:s', 1661910865); # 通过某个时间戳来格式化时间
$t = time();  # 当前时间戳
<?php
    $mytime = getdate(); // 得到当前时间日期的一个属组
 // $mytime = getdate(1661910865);
    echo "年 :".$mytime['year']."<br>";
    echo "月 :".$mytime['mon']."<br>";
    echo "日 :".$mytime['mday']."<br>";
    echo "时 :".$mytime['hours']."<br>";
    echo "分 :".$mytime['minutes']."<br>";
    echo "秒 :".$mytime['seconds']."<br>";
    echo "一个小时中的第几钟 :".$mytime['minutes']."<br>";
    echo "这是一分钟的第几秒 :".$mytime['seconds']."<br>";
    echo "星期名称 :".$mytime['weekday']."<br>";
    echo "月份名称 :".$mytime['month']."<br>";
    echo "时间戳   :".$mytime[0]."<br>";
?>

数组常用函数

主要是数组元素的增删改查操作

PHP
<?php
header("Content-Type: text/html; charset=utf-8");  // 在响应头中添加了content-type: utf-8,header()是php提供的加工响应头键值对的
$a = array('aa', 'bb', 33, 55);
echo $a[0].'<br>';
echo var_dump($a).'<br>';
$a[5] = 'kk';
echo var_dump($a).'<br>';
$a[1] = 'cc';
echo var_dump($a).'<br>';
//unset()删除
unset($a[1]);
echo var_dump($a).'<br>';
?>

其他数组常用函数:

函数名功能
unset()删除数组中某个元素unset($a[‘jaden’]);
in_array()判断某个元素是否在数组中in_array(元素, 数组);
range()创建并返回一个包含指定范围的元素的数组。

image-20250905162629159

image-20250905162647651

php文件和目录操作

PHP
readfile()  //读取文件内容,并返回文件的长度,这个没啥用
file_get_contents('文件路径')  //读取文件,支持本地文件和远程文件url
file_put_contents('文件路径', '内容')  //保存文件
// readfile会自动打印文件内容,
$a = readfile('1.txt');
echo '<br>';
echo $a; //文件长度
// 写入数据    
$a = 'aabbkkdd';
file_put_contents('1.txt', $a); // 没有文件会自动创建
$b = 'ooooo';
file_put_contents('1.txt', $b); // 每次写入新数据都会先清空原文件数据
//读取文件内容
$a = file_get_contents('1.txt');
$a = file_get_contents('http://www.baidu.com/img/flexible/logo/pc/result.png'); 
//直接请求https的网址会报错,休要修改配置,1.windows下的PHP,只需要到php.ini中把
extension=php_openssl.dll前面的;删掉,重启服务就可以了。2.linux下的PHP,就必须安装
openssl模块,安装好了以后就可以访问了。
// file_put_contents('1.txt', $a) # 直接将读取的文件输入写入到本地文件中
echo $a;
# 注意:文件读写的内容都是字符串数据格式。

fopen

fopen、fread、fwrite、fclose操作读取文件。

resource fopen ( string $文件名, string 模式)

string fread ( resource $操作资源(也就是文件路径), int 读取长度)

bool fclose ( resource $操作资源 )

注:resource 、string、bool表示的是方法的返回值 。

fopen的模式有下面几个,我们来讲一下fopen的模式:

模式说明
r只读方式打开,将文件指针指向文件头。 重点
r+读写方式打开,将文件指针指向文件头。
w写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建。
w+读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建
a写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建 ,称之为追加。
a+读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之
x创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建 。
x+创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建

示例:

PHP
$a = fopen('1.txt', 'r')
#$b = fread($a,18);
$b = fgets($a);
echo $b."<br>";
while(!feof($a)){  // !feof($a)表示如果读到文件最后了。
    $b = fgets($a);
 echo $b."<br>";
} 
$b = fwrite($a, 'aaaaa'); //失败返回false,成功就返回写入的字符个数
echo $b."<br>";
if ($b == false){  // r模式打开的文件不能写入,r+模式可以写,但是会从文件内容开头覆盖原有内容
    echo '写入失败';
}
#fclose($a);

Thanks for reading!

TLS和SSL协议详解

2025年 08月04日 19:15 星期一
2860 字 · 16 分钟