PHP基础篇

PHP的工作流程:

  1. 上网浏览页面,客户端通过HTTP协议向Web服务器请求数据。

  2. 拿Apache举例,它接收到数据后,转交给PHP来处理这些数据。

  3. PHP与数据库交互,比如Mysql,通过查询或其它操作访问数据。

  4. 数据库将访问操作的数据返回给PHP让它再去处理。

  5. PHP再去处理这些数据,整理成网页能看到的样式,然后返回给Web服务器。

  6. Web服务器接收到了PHP整理好的数据后,将其打包成HTTP协议返回给客户端。

一、变量与其数据类型

变量为一种可变化、可根据所需将其赋值的量。

变量使用规则:

1、变量必须以 $ 符号开始
2、变量不能使用数字开头
3、变量开头可以下划线 _ 开始
4、变量名不能是PHP常用的关键字
5、变量大小写敏感,$a $A 是两个变量

举例:

<?php
$a = 1;
$b = "7089bAt";

echo $a;
echo '<br>';
echo $b;
echo '<br>';

$c = 5;
$d = 6;
$e = $c + $d;
echo $e;
?>

解读:

在上面代码中使用了 = 进行赋值,即把右边的数据给左边,这时 $a 不在孤独了,它有了整型 1 陪伴,而 $b 也有了字符串 7089bAt 陪伴,还有下面的变量。在下面用了个最最最简单的计算来了解一些变量最基本的作用。

在程序中,可以对不同类型变量,进行不同的操作。在进行变量操作时,已声明的变量会被计算机内存分配一块区域存放你所赋的值,即 $a 在内存中有一小块区域,其里面存放着 1 这个整型。以后再去使用变量 $a 时知道它是个整型 1 ,可以根据你的需求来使用它。这个值是可以根据需求变化的,而且 $a 这个变量只在本代码段里的值是 1 。

二、变量的数据类型

1、四种标量类型

  • 布尔型(boolen)

  • 整型(integer)

  • 浮点型(float)

  • 字符串(string)

2、两种复合类型

  • 数组(array)

  • 对象(object)

3、两种特殊类型:

  • 资源(resource)

  • Nul

4、详细介绍

四种常用的标量数据类型,知道是什么怎么用即可

4.1 布尔型(boolen)

它只有真(True)和假(False)两个值。在PHP中,可以将任何类型的值都转换为真或假。比如:整型数值零(0)、浮点型(0.0)、空白字符串("")为假,其它如-1、1、0.1为真

例如:

<?php
$a = true;
if($a == true){
   echo "<h1>工作室</h1>";
}
?>

解读(布尔类型常在条件语句中使用):

首先,将 $a 赋值为 true ,接下来,在条件语句中的条件判断处进行判断,即 $a == true ,( == 两个等于号是判断的意思, = 一个等于号是赋值的意思)。将 $a 赋值为 true ,所以说 $a == true 条件是成立的,下面就会执行 输出“工作室”这句话。

4.2 整型(integer)

四种标量类型之一,其数据类型只能为整数(正整数或负整数)。

其区间参考下面链接:https://www.php.net/manual/zh/language.types.integer.php

给定的数值超出最大范围叫做整数溢出,会被当做浮点型处理。

4.3 浮点型(float)

四种标量类型之一,它是有小数位的,并且精度会比整数大的多。

具体精度可看:https://www.php.net/manual/zh/language.types.float.php

比如: $a=3.14; , $b=-0.12; , $c=70.89; 这些都是浮点型。

4.4 字符串(string)

四种标量类型之一,字符串即连续的字符序列,可以是数字、字母或符号。

定义字符串的三种方式:

  • 单引号(' ')

$a = '123aBc';
  • 双引号(" ")

$b = "123abc";
  • 定界符(<<<)

定界符用于定义格式化的大文本,其输出格式会按照你在定界符中所敲打的形式输出。

<<<str
   格式化文本
str;

举例:

<?php
echo <<<"txt"
   "Kalpa"工作室
       我是'Kalpa'
   Hello World!
"\n"换行有效
txt;
?>
<?php
echo <<<'txt'
   Kalpa工作室
       我是"Kalpa"
   Hello World!
"\n"换行无效
txt;
?>

备注:

定界符开头的声明和结尾必须一样,结束的标识符必须在新的一行开头,并用 ; 结束。

注意:

单引号与双引号定义字符串区别:

在单双引号中包含变量名时,双引号将其变量值输出,而单引号只会当普通字符输出。

PHP函数 var_dump(变量名) 可以查看数据类型。

<?php
var_dump(1);
echo  '</br>';
var_dump('1');
echo  '</br>';
var_dump(1.0);
echo  '</br>';
var_dump(TRUE);
?>

-->
 int(1)
 string(1) "1"
 string(3) "1.0"
 bool(true)

三、常量

常量在脚本中是初始化的值,不会变的值。一般在程序中定义了常量之后,在整个程序中这个值都是固定有效的。

1、自定义常量

关键字 - define()

define(string constant_name, mixed value, case_sensitive=true)

参数(string constant_name):必选参数,常量名称。
参数(mixed value):必选参数,常量的值。
参数(case_sensitive=true):可选参数,指定是否大小写敏感,true为不敏感。

2、获取常量值

关键字 - constant(),defined()

关键字是程序中的保留字,每个字符都有特定的含义,处理程序时只认这些关键字,也会根据关键字处理相应功能。

1、constant(string constant_name)

参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回正常值,如果失败,则提示错误信息(常量没有被定义)

2、defined(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回true,如果失败,返回false

四、运算符与表达式

1、运算符

运算符,是对常量,变量或数据进行计算的符号。比如,= 是赋值运算符,== 是比较运算符,算术运算符 +、-、*、/ 等,除了这些还有很多运算符,有不同的作用。

PHP中有以下运算符:

算术运算符
字符串运算符
赋值运算符
比较运算符
条件运算符
递增或递减运算符
位运算符
逻辑运算符

1.1 算术运算符

就是常见的 加,减,乘,除,取余,所使用的的符号为 +,-,*,/,%

1.2 字符串运算符

字符串运算符就是对字符串进行基本操作。

比如使用英文句号 . ,是将两个或多个字符串连接起来形成一个新的字符串。

1.3 比较运算符

比较运算符就是对变量或表达式的值进行大小、真假比较,根据比较返回true或false。

1.4 逻辑运算符

在程序中逻辑运算符是比较中要的一种运算符。

&&或and:($a && $b)逻辑与,当两者都为真时,结果为真
||或or:($a || $b)逻辑或,但两者其中一者为真的时候,结果为真
!:逻辑非,(!$a)是个英文的感叹号,当$a为假时,结果为真
xor:逻辑异或,($a xor $b),当$a,$b为一真一假时,结果为真

更多运算符符号及使用方法,还有运算优先级可以参考:

https://www.runoob.com/php/php-operators.html

2、表达式

表达式是PHP语言的基本元素,它是将运算符和操作数连接起来的式子。

$a=7089 这个赋值操作就是最简单的表达式,还有上面逻辑运算符两者比较,也是表达式。

表达式多搭配用于条件语句,循环语句。

五、条件判断语句

在编写程序时常用到条件语句,而且会与一些表达式,搭配使用,关系相当密切。

条件语句就是对一件事的判断,根据判断结果做出一项选择。比如抛硬币,如果正面朝上,我亲你,如果反面朝上,你亲我。这就是一个简单的条件语句的判断。(虽然很不要脸 -.-)

条件表达式关键字

if
if...else
if...elseif...else
switch...case

1、if语句

if语句是最简单的条件判断语句。它判断一个条件,如果条件成立,就执行下面语句,如果不成立,则跳过这段程序,执行下面程序。

例如:

<?php
   $a=9;
   $b=9;
if($a == $b){
   echo "嘿嘿,我们两是一对";
}
?>

在代码中,通过算术运算符将两个变量进行赋值,在if判断中结果True(两个变量相等),就执行下面那句代码,使用到的 == 两个等号是比较运算符。

2、if...else语句

if...else语句有两个结果。它判断一个条件,如果条件成立就执行 if 下面的语句,如果条件不成立的,就执行 else 下面的语句。

例如:

<?php
   $a=1;
   $b=2;
if($a == $b){
   echo "嘿嘿,我们两是一对";
}
else{
   echo "可惜我们不是一对";
}
?>

此处使用到了 == 两个等号,也就是比较运算符。在if条件中进行判断数值是否相等,成功则执行if的语句,不成功则执行else的语句

3、if...else if...else多条件语句

多条件语句根据成立的条件不同来返回结果。此语句在上一条语句的基础上,if语句如果执行失败,将再次判断一个esleif语句,执行效果与if同效力。

<?php
$day = 6;
if($day == 4){
echo "今天是疯狂星期四!!!";
}elseif($day==1 || $day==2 || $day==3 || $day==5 || $day==6 || $day==7){
echo "今天又是努力的一天!";
}else{
       echo "输入错误!";
  }
?>
<?php
$t = date("H");
if ($t<"10"){
   echo "Have a good morning!";
}elseif ($t<"20"){
   echo "Have a good day!";
}else{
   echo "Have a good night!";
}
?>

-->Have a good day!

如果当前时间小于10,将输出"Have a good morning!",如果当前时间不小于10且小于20,则输出"Have a good day!",否则输出"Have a good night!"。

4、switch...case语句

switch...case分支控制语句,对于一个条件进行判断,根据结果和case中的值对比,如果相等,就执行对应的语句,直到switch语句结束或遇见break。

<?php
switch (n)
{
case label1:
   如果 n=label1,此处代码将执行;
   break;
case label2:
   如果 n=label2,此处代码将执行;
   break;
default:
   如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>

例如:

<?php
$ta = "xiaoli";
switch($ta){
   case "xiaoli":
       echo "小李舔狗!";break;
   case "xiaozhang":
       echo "小张个高!";break;
   case "xiaowang":
       echo "小王白净!";break;
   case "xiaozhao":
       echo "小赵腿长!";break;
   default:
       echo $ta."同志是谁?";break;
}
?>

这段代码使用 switch...case 语句,先设置一个变量其值如上,然后使用该和 case 下设定的值比较,如果比较条件成功,就会执行响应的语句,如果设置了一个case没有的值,就会执行 default 下的语句。

代码中出现的break也是PHP中的关键字,它的意思是跳出这次执行,跳出switch语句。如果不使用 break 的话,程序自动执行完剩下的代码,然后退出。

<?php
$favcolor="red";
switch ($favcolor){
   case "red":
       echo "你喜欢的颜色是红色!";break;
   case "blue":
       echo "你喜欢的颜色是蓝色!";break;
   case "green":
       echo "你喜欢的颜色是绿色!";break;
   default:
       echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>

-->你喜欢的颜色是红色!

六、循环语句

所谓循环,哲学点说就是某件事物周而复始的运动或变化。程序语言中的循环是个闭环,从头开始到结尾然后再从头开始。

PHP语言中的四种循环结构分别是: while循环、do...while循环、for循环、foreach循环。

1、while循环

同if效果,只需单一的条件,如果条件成立,就循环执行代码块但,是此会执行循环。

格式:

while (条件)
{
   要执行的代码;
}

举例:

<?php
$a = 0;
while($a <= 10){
   echo "第".$a."次循环的数字是:".$a."<br>";
   $a++;
}
?>

代码运行了十一次。首先给变量 $a 的值设置为了0,接下来就是while循环部分,它设定的条件为 $a <= 10 ,就是变量这个数字 小于或等于10 的时候停止循环,既然一开始设定的变量为0小于10,那就就执行下面代码。$a++ 的意思是,对变量 $a 进行自加1 ,拓展开来就是 $a=$a+1 。这样的话,变量一开始为0,进入一次后加了1后就变为1,然后继续进行第二次判断,还是小于10,那就就继续执行下面代码,直到变量 $a 自加到10的时候与条件相等,此时就会终止循环。

2、do...while循环

do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环

do
{
   要执行的代码;
}
while (条件);
<?php
$i=1;
do{
   $i++;
   echo "The number is " . $i . "<br>";
}while ($i<=5);
?>

-->
 The number is 2
 The number is 3
 The number is 4
 The number is 5
 The number is 6

下面的实例首先设置变量 i 的值为 1 ($i=1;),然后,开始 do...while 循环。循环将变量 i 的值递增 1,然后输出。先检查条件(i 小于或者等于 5),i 小于或者等于 5,循环将继续运行。

3、for循环

指定执行条件,然后反复执行区域代码。

for (初始值; 条件; 增量)
{
   要执行的代码;
}

例如:


<?php
for ($i=1; $i<=5; $i++)
{
   echo "数字为 " . $i . PHP_EOL;
}
?>


--->
数字为 1
数字为 2
数字为 3
数字为 4
数字为 5

定义一个初始值为 i=1 的循环。只要变量 i 小于或者等于 5,循环将继续运行。循环每运行一次,变量 i 就会递增 1

4、foreach循环

foreach循环只用于循环数组,可遍历每个数组中的键值对。

foreach ($array as $value)
{
   要执行代码;
}

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。

foreach ($array as $key => $value)
{
   要执行代码;
}

例如:

<?php
$num=array("0","1","2");
foreach ($num as $value){
   echo $value . "<br>";
}
?>

--->
 0
 1
 2

5、数组

数组是数据类型中的复合类型。它能够在一个变量中存储一个或多个值,并且能通过索引号访问对应的值。注:数组索引号是从零(0)开始,零(0)就是第一位。

5.1 三种数组类型:

索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组

5.2 声明数组关键字 - array()

索引数组:
$a = array("1","2","3");
注:索引数组索引号是从零(0)开始,零(0)就是第一位。

关联数组:
$num = array("one"=>"1","two"=>"2","three"=>"3")

在很多过滤一些sql注入语句、xss等都会将要过滤的语句写进数组中,便于管理。毕竟这么多过滤语句总不能都一个个声明变量。

七、函数

函数,在每个程序语言中都及其重要,它将不同功能代码打包成不同的代码块,极大减少了代码的冗杂。就像数学公式一样拿来套用,代数即可算出想要的结果。函数亦是如此,不同函数你可以定义不同功能,用到哪个功能就选择哪个函数,极大的提高了代码的复用性。

关键字:function

function 函数名(参数1,参数2,...参数n){
   函数体,具体代码
  [return 参数];
}
<?php
function add($x,$y){
   $total=$x+$y;
   return $total;
}
echo "1 + 16 = " . add(1,16);
?>

-->
 1 + 16 = 17
  • add(1,16):函数的利用方式。

  • $x,$y:两个形式参数,可以理解为一个记号。在利用函数时,要传入两个参数才能计算,$x和$y分别对应着1和16(这两个是实际数值,它是实际参数),然后进入函数体中,对这两个数字进行计算。

  • return $total;:将计算的结果值返回,并结束函数的运行。

  • 形式参数 :如果函数需要传入参数,需要用到形式参数,也可以理解为记号、标志。

  • 实际参数 :在向函数传入实际参数时,所传入的参数值是实际参数。

  • 函数也可以没有参数,也可以不返回值。

  • 在函数之后,还有一个比较抽象的概念 - 面向对象。

八、字符串操作

字符串是一串连续的字符,在PHP中用单引号或者双引号将其引起来。

当然,还可以对字符串进行很多操作,处理。

例如,PHP使用特定预定义的数组来接收WEB发来的HTTP协议数据,这些发来的数据,基本都是字符串,对于这些字符串我们要进行响应处理,比如说POST方式发来的数据,如果要想防止SQL注入,我们可以对字符串进行一些相关操作,防止SQL注入。

PHP字符串处理函数:

addcslashes 为字符串里面的部分字符添加反斜线转义字符
addslashes 用指定的方式对字符串里面的字符进行转义
bin2hex 将二进制数据转换成十六进制表示
chop rtrim() 的别名函数
chr 返回一个字符的ASCII码
chunk_split 按一定的字符长度将字符串分割成小块
convert_cyr_string 将斯拉夫语字符转换为别的字符
convert_uudecode 解密一个字符串
convert_uuencode 加密一个字符串
count_chars 返回一个字符串里面的字符使用信息
crc32 计算一个字符串的crc32多项式
crypt 单向散列加密函数
echo 用以显示一些内容
explode 将一个字符串用分割符转变为一数组形式
fprintf 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table 返回可以转换的HTML实体
hebrev 将Hebrew编码的字符串转换为可视的文本
hebrevc 将Hebrew编码的字符串转换为可视的文本
html_entity_decode htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —htmlspecialchars()函数的反函数,将HTML实体转换为字

htmlspecialchars 将字符串中一些字符转换为HTML实体
implode 将数组用特定的分割符转变为字符串
join 将数组转变为字符串,implode()函数的别名
levenshtein 计算两个词的差别大小
localeconv 获取数字相关的格式定义
ltrim 去除字符串左侧的空白或者指定的字符
md5_file 将一个文件进行MD5算法加密
md5 将一个字符串进行MD5算法加密
metaphone 判断一个字符串的发音规则
money_format 按照参数对数字进行格式化的输出
nl_langinfo 查询语言和本地信息
nl2br 将字符串中的换行符“\n”替换成“<br/>
number_format 按照参数对数字进行格式化的输出
ord 将一个ASCII码转换为一个字符
parse_str 把一定格式的字符串转变为变量和值
print 用以输出一个单独的值
printf 按照要求对数据进行显示
quoted_printable_decode 将一个字符串加密为一个8位的二进制字符串
quotemeta 对若干个特定字符进行转义
rtrim 去除字符串右侧的空白或者指定的字符
setlocale 设置关于数字,日期等等的本地格式
sha1_file 将一个文件进行SHA1算法加密
sha1 将一个字符串进行SHA1算法加密
similar_text 比较两个字符串,返回系统认为的相似字符个数
soundex 判断一个字符串的发音规则
sprintf 按照要求对数据进行返回,但是不输出
sscanf 可以对字符串进行格式化
str_ireplace 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad 对字符串进行两侧的补白
str_repeat 对字符串进行重复组合
str_replace 匹配和替换字符串
str_rot13 将字符串进行ROT13加密处理
str_shuffle 对一个字符串里面的字符进行随机排序
str_split 将一个字符串按照字符间距分割为一个数组
str_word_count 获取字符串里面的英文单词信息
strcasecmp 对字符串进行大小比较,不区分大小写
strchr 通过比较返回一个字符串的部分strstr()函数的别名
strcmp 对字符串进行大小比较
strcoll 根据本地设置对字符串进行大小比较
strcspn 返回字符连续非匹配长度的值
strip_tags 去除一个字符串里面的HTML和PHP代码
stripcslashes 反转义addcslashes()函数转义处理过的字符串
stripos 查找并返回首个匹配项的位置,匹配不区分大小写
stripslashes 反转义addslashes()函数转义处理过的字符串
stristr 通过比较返回一个字符串的部分,比较时不区分大小写
strlen 获取一个字符串的编码长度
strnatcasecmp 使用自然排序法对字符串进行大小比较,不区分大小写
strnatcmp 使用自然排序法对字符串进行大小比较
strncasecmp 对字符串的前N个字符进行大小比较,不区分大小写
strncmp 对字符串的前N个字符进行大小比较
strpbrk 通过比较返回一个字符串的部分
strpos 查找并返回首个匹配项的位置
strrchr 通过从后往前比较返回一个字符串的部分
strrev 将字符串里面的所有字母反向排列
strripos 从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos 从后往前查找并返回首个匹配项的位置
strspn 匹配并返回字符连续出现长度的值
strstr 通过比较返回一个字符串的部分
strtok 用指定的若干个字符来分割字符串
strtolower 将字符串转变为小写
strtoupper –将字符串转变为大写
strtr 对字符串比较替换
substr_compare 对字符串进行截取后的比较
substr_count 计算字符串中某字符段的出现次数
substr_replace 对字符串中的部分字符进行替换
substr 对字符串进行截取
trim 去除字符串两边的空白或者指定的字符
ucfirst 将所给字符串的第一个字母转换为大写
ucwords 将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf 按照要求对数据进行返回,并直接写入文档流
vprintf 按照要求对数据进行显示
vsprintf 按照要求对数据进行返回,但是不输出
wordwrap 按照一定的字符长度分割字符

九、文件引用

PHP文件引用是指将另一个脚本的全部内容以及功能包含到当前脚本中进行使用,可以减少代码的重用,与C语言中的include使用大致相似。

1、引用文件语句:

  • include语句

  • require语句

  • include_once语句

  • require_once语句

1.1 include语句

include语句引用外部文件时,代码执行到include语句时才会将外部文件引用并读取代码。

使用方法:include(引用文件名称)

1.2 require语句

一般要放在文件起始位置,常用于引用需要使用的公共函数文件和公共类文件。

1.3 include语句与require语句比较

在调用文件时,如果未找到,require语句会输出错误信息,并且终止脚本处理;include语句会输出警告,但不会终止脚本的处理。

1.4 include_once语句 与 require_once语句

这两个与上面两个相似,只不过在执行导入文件前,它们会检测该文件是否在其它地方被引用过,如果有,则不再引用,并且程序只能引用一次。

十、基础细节

1、PHP语言的扩展名为 .php
2、PHP程序中可以包含 html,JavaScript代码
3、脚本范围在 <?php 这个范围内 ?>
4、PHP注释有://,#,/* ... */
5、在编写PHP代码时,每个语句结束时,都不要忘记使用英文分号(;),即为指令分隔符

十一、PHP开发与交互

1、PHP与WEB交互

HTTP请求常用到 GET 与 POST 这两个请求。PHP是根据接收通过HTTP协议请求来的数据做处理的,在PHP中也有写好的预定义变量来处理响应的请求:

$_GET:获取通过GET方式提交的数据
$_POST:获取通过POST方式提交的数据
$_COOKIE:获取Cookie数据,这些数据多数是由setcookie()函数设置的值
$_SESSION:获取包含与所有会话变量有关的信息
$_FILES:处理文件上传

1.1 GET方式表单提交并接收

GET请求URL固定,所有参数均后缀在URL后面,以key=value&key1=value1&key2=value2方式拼装;请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例如:login.actionname=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其它字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

GET方式表单提交并接收示例:

既然是GET方式提交表单,那么先用HTML写一个简单的表单页面:

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>GET请求例子</title>
</head>

<body>
   <form method="GET" action="get.php">
      名字:<input type="text" name="name"><br>
      年龄:<input type="text" name="age"><br>
       <input type="submit">
   </form>
</body>

</html>

将其保存为 .html 文件。这是一个form表单提交数据的例子,method 是提交方式,使用 GET 方式提交,所以设置为 GET , action 是指用哪个PHP脚本处理表单提交的数据,将其设为 get.php 。再下面是 input 的设置,将其设为 text 文字域,分别将名字和年龄设置的 name 设置为了 name 和 age ,这两个是让 $_GET 明确接收哪个数据。

处理表单数据的 get.php 代码:

<?php
$name = $_GET["name"];
$age = $_GET["age"];
echo $_GET["name"]."<br>";
echo $_GET["age"]."<br>";
echo "恭喜{$name}今年{$age}岁了";
?>

使用了 GET 来接收数据,$_GET["age"] 指的是接收年龄这个文字域的数据,这个 age 就是html文件中年龄文字域中 name 设置的属性,即name="age" 。

1.2 POST方式表单提交并接收

1.2.1 关于POST
  1. 请求URL固定,所有参数均放在HTTP的请求报文中(body中),所有参数以JSON、XML格式序列化文本串或form-data传输。

  2. 请求URL不固定,部分参数会放在URL中,即http://XXX.com/userlogin/login?sign=xxx&pass=xxx以拼装成最终的服务器请求页面连接,将其他业务参数放在body中。所有参数以JSON、XML格式序列化文本串或form-data传输。

1.2.2 POST方式三种数据格式说明
  1. JSON数据放在BODY中,如下所示

    "{"name":"用户名","id":"1"}"
  2. XML数据放在BODY中,如下所示

    "<name>用户名<name><id>1</id>"
  3. form-data数据放在BODY中

1.2.3 Cookie与Session
  • Cookie工作原理

    1. 浏览器端第一次发送请求到服务器端。

    2. 服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端。

    3. 浏览器端再次访问服务器端时会携带服务器端创建的Cookie。

    4. 服务器端通过Cookie中携带的数据区分不同的用户。

  • Session工作原理

    1. 浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为Session对象的ID),然后将该Cookie发送至浏览器端。

    2. 浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象。

    3. 服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。

      • name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象。

      • name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie。

      • value为SessionId存在,返回session对象。

      • value为SessionId不存在(Session对象默认存活30分钟),返回1中重新去创建Session与特殊的Cookie。

  • Cookie与Session的区别:

    1. Cookie数据存放在客户的浏览器上,Session数据放在服务器上。

    2. Cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,主要考虑安全应当使用Session。

    3. Session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器性能,主要减轻服务器性能方面应当使用Cookie。

    4. 单个Cookie在客户端的限制是3K,就是说一个站点在客户端存放的Cookie不能3K。

  • 附注:

    1. session不产生cookie。

    2. session与cookie都是为了方便用户登录。

    3. cookie可以降低服务器的负载。

    4. session在浏览器关闭后会销毁。

    5. cookie可以指定活动周期。

  • Cookie和Session的区别参考:https://blog.csdn.net/chen13333336677/article/details/100939030

1.3 实现文件上传

实现文件上传可以帮助理解文件上传漏洞,实现文件上传的预定义变量是 $_FILES。

在PHP中的 php.ini 文件中有些参数可以对上传文件进行控制:

php.ini 中定位到File Uploads处:
file_uploads:如果该值设置为On,代表服务器支持文件上传,Off为不支持,默认为On。
upload_tmp_dir:可以设置上传文件的临时目录,上传后,先放在临时目录中,多数使用系统
默认目录。
upload_max_filesize:服务器允许上传文件最大的值,MB为单位。默认为2MB。
php.ini文件修改后,需要重启服务器

$_FILES 预定义变量中参数的含义:

$_FILES["filename"]["name"]:上传文件的名字
$_FILES["filename"]["size"]:上传文件的大小,单位为字节
$_FILES["filename"]["type"]:上传文件的MIME类型
$_FILES["filename"]["tmp_name"]:上传文件临时目录的
$_FILES["filename"]["error"]:上传文件的结果,如果返回0,则说明文件上传成功

实现文件上传实例:

首先,编写html页面:

<html>
<head>
   <meta charset="utf-8" />
   <title>文件上传例子</title>
</head>
<body>
   <form action="uploadfile.php" method="POST" enctype="multipart/form-data">
      上传文件:<br>
       <input type="file" name="file" id="file"><br>
       <input type="submit" name="submit" value="提交文件">
   </form>
</body>
</html>

form表单中的 enctype 属性规定了form表单数据在发送到服务器时候的编码方式,multipart/form-data 是指定传输数据为二进制数据,例如图片、mp3、文件。然后是下面上传文件域的设置,input下的 type 属性设置为 file 即代表上传文件域。

uploadfile.php 代码:

<?php
if ($_FILES["file"]["error"] > 0){
echo "错误: " . $_FILES["file"]["error"] . "<br>";
}else{
echo "文件是:" . $_FILES["file"]["name"] . "<br>";
echo "MIME类型是:" . $_FILES["file"]["type"] . "<br>";
echo "大小是:" . $_FILES["file"]["size"] . " <br>";
echo "存储在:" . $_FILES["file"]["tmp_name"];
}
?>

这段代码用了简单的条件判断,如果成功上传,就会显示上传文件的一些信息。

PHP 文件上传参考:http://edu.jb51.net/php/php-file_upload.html

2、PHP与MySQL交互

服务器常将数据存储在数据库中,在访问网页时通过PHP响应函数调用数据库中存储的数据,然后返回到前端界面。

PHP要想操作MySQL需要在 php.ini 中设置一些参数,打开对应数据库扩展程序。

在此使用 mysqli 扩展,它与 mysql 扩展用法基本相似,但是 mysqli 的函数名称是以 mysqli 开始的,两者区别对初学来说影响不大,mysqli有一系列函数集可以操作mysql数据库。

还有一个是 PDO ,它可以应用在12中不同的数据库中,而 mysqli 只能应用于mysql 中。

mysql与mysqli区别:https://www.cnblogs.com/shineen/p/16425767.html

2.1 PHP与MySQL交互基本流程及对应函数

2.1.1 连接MySQL数据库
mysqli_connect("MySQL服务器地址","用户名","密码","连接数据库名称(可选)","MySQL服务器使用的端口(默认3306)")
2.1.2 选择MySQL数据库
mysqli_select_db("连接表示(必选参数)","数据库名称(必选参数)")
当然在连接数据库时,也可以同时选择数据库名称
2.1.3 执行SQL语句
mysqli_query("连接标识(必选参数)","查询语句(必选参数)")
2.1.4 获取执行结果
mysqli_fetch_array():将结果集返回数组中。
mysqli_fetch_object():从结果集中获取一行作为对象
mysqli_fetch_row():从结果集中获取一行作为枚举数组
mysqli_fetch_assoc():从结果集中获取一行作为关联数组
mysqli_num_rows():获取查询结果集中的记录数
2.1.5 释放内存,关闭连接
mysqli_free_result(): 释放结果内存。
mysqli_close():关闭先前打开的数据库连接
2.1.6 补充

PHP 5 MySQLi 函数及具体用法:https://www.runoob.com/php/php-ref-mysqli.html

2.2 连接数据库并选择数据库实例

<?php
   $host = "127.0.0.1";
   $user = "root";
   $pwd = "root";
   $connID = mysqli_connect($host,$user,$pwd);
   $select_db = mysqli_select_db($connID,"information_schema");
   if($connID){
   echo "<script type='text/javascript'>alert('连接成功!')</script>";
  }else{
   echo "<script type='text/javascript'>alert('连接失败!')</script>";
  }
?>

2.3 PHP MySQL 读取数据

https://www.runoob.com/php/php-mysql-select.html

posted @ 2022-09-27 21:21  HKalpa  阅读(68)  评论(0编辑  收藏  举报