前言
最近在学习文件上传漏洞,因此接触到大量的php代码,借此机会系统地学习了一下php,整理记录如下
一、函数
Ⅰ. 自定义函数
<?php
function fun_name ( $para1 , $para2 , ... )
{
}
? >
fun_name ( $para1 , $para2 , ... ) ;
Ⅱ. String的相关函数
序号 函数名 描述 1 strtolower(string)
转为小写,返回string【防御大小写绕过】 2 strtoupper(string)
转为大写,返回string【防御大小写绕过】 3 strlen(string)
返回字符串长度,返回int 4 trim(string)
去除字符串左右两边的某些字符(默认空白符),返回string【防御空格绕过】 5 ltrim(string)
去除字符串左边的某些字符(默认空白符),返回string 6 rtrim(string)
去除字符串右边的某些字符(默认空白符),返回string 7 str_replace(mixed1, mixed2, mixed3)
将mixed3中的所有mix1用mixed2替换,返回mixed 8 strpbrk(string1, string2)
*(string pointer break)*在string1中查找string2,返回string 9 explode(string1, string2)
用string1将string2分割,返回array
Ⅲ. Array的相关函数
序号 函数名 描述 1 count(array)
返回数组中数据单元的数量,返回int 2 implode(string, array)
用字符串连接数组元素,返回array 3 array_merge(array1, array2, ...)
将两个数组合并为一个数组,返回array 4 in_array(mixde, array)
判断数组中是否存在指定的值,返回bool 5 sort(array)
对数值数组进行升序排序,返回bool 6 rsort(array)
*(reverse)*对数值数组进行降序排序,返回bool 7 array_unique(array)
移除数组中重复的值,返回array 8 array_push(array, mixed1, mixed2, ...)
将元素(可以是多个)压入数组末尾,数组长度对应增加,返回int 9 array_pop(array)
弹出并返回数组的最后一个元素,返回mixed
Ⅳ. 文件系统函数
序号 函数名 描述 1 basename (string $path
, string $suffix
= “”)返回路径中的文件名部分(string) 2 fopen ( string $filename
, string $mode
, bool $use_include_path
= false
, ?resource $context
= null
)将$filename指定的名字资源绑定到一个流上,返回resource|false 3 fclose (resource $stream
)将$stream
指向的文件关闭,返回bool 4 fwrite (resource $stream
, string $data
, ?int $length
= null
)将$data
的内容写入文件指针$stream
中,返回int|false 5 fread (resource $stream
, int $length
)从文件指针$stream
读取最多$length
个字节,返回string|false 6 rename (string $from
, string $to
, ?resource $context
= null
)把$from
命名为$to
,返回bool 7 unlink (string $filename
, ?resource $context
= null
)删除$filename
,返回bool 8 move_uploaded_file (string $from
, string $to
)检查由$from
指定的文件是否是合法的上传文件,若合法,则将其移动至$to
指定的文件,返回bool
Ⅴ. 其他常用函数
isset ( )
empty ( )
unset ( )
reset ( )
end ( )
... ...
Ⅵ. 作用域
作用域:函数 作用域 + 全局 作用域 函数作用域中的变量在外部无法访问 而全局作用域中的变量在函数内部可以访问 注意,一定要在调用函数后才能访问其中的全局变量
<?php
function glo_def ( ) {
global $glo_str ;
$glo_str = "我在全局作用域" ;
}
glo_def ( ) ;
var_dump ( $glo_str ) ;
? >
二、运算符
Ⅰ. 基本运算符
序号 运算符 描述 1 +
相加 2 -
相减 3 *
相乘 4 /
相除 5 %
取余 6 ++$var
预递增 7 --$var
预递减 8 $var++
后递增 9 $var--
后递减 10 .
连接"字符串"
Ⅱ. 赋值运算符
序号 运算符 描述 1 =
赋值 2 +=
先相增,后赋值 3 -=
先相减,后赋值 4 *=
先相乘,后赋值 5 /=
先相除,后赋值 6 %=
先取余,后赋值 7 .=
先连接,后赋值
Ⅲ. 比较运算符
序号 运算符 描述 1 >
大于 2 >=
大于或等于 3 <
小于 4 <=
小于或等于 5 ==
等于 6 !=
和<>
不等于 7 ===
绝对等于(值和类型均相等) 8 !==
不绝对等于(值或类型中有一项不相等)
Ⅳ. 逻辑运算符
序号 运算符 描述 1 and
和&&
与 2 or
和`3 xor
异或 4 !
非
三、循环
Ⅰ. while
<?php
$num = 0 ;
while ( $num <= 5 ) {
echo "$num " ;
echo "<hr/>" ;
$num += 1 ;
}
? >
Ⅱ. do…while
<?php
$num = - 1 ;
do {
$num += 1 ;
echo "$num " ;
echo "<hr/>" ;
} while ( ( $num >= 0 ) && ( $num <= 5 ) ) ;
? >
Ⅲ. for
<?php
for ( $num = 0 ; $num <= 5 ; $num ++ ) {
echo "$num " ;
echo "<hr/>" ;
}
? >
Ⅳ. continue
Ⅴ. break
结束循环 可以跳出多层循环:break (要跳出的循环层数,默认为1);
四、php操作MySQL
Ⅰ. PDO操作数据库
1. PDO(Php Data Object)——php数据对象
PDO提供了一个数据访问抽象层,统一了php访问各种类型 数据库的访问方式
2. PDO连接
$pdo = new PDO ( $dsn , $username , $password ) ;
3. 编码
header ( 'content-type:text/html;charset=utf-8' ) ;
$pdo = new PDO ( 'mysql:host=localhost;dbname=blogs' , 'root' , 'root' , array ( PDO :: MYSQL_ALTR_INIT_COMMAND => "SET NAMES utf8" ) ) ;
$pdo -> query ( 'SET NAMES utf8' ) ;
Ⅱ. MySQL基础操作
1. 查询
# WHERE条件
SELECT * FROM article
WHERE `class` = 'PHP';
# 选择要返回字段
SELECT title, img, date, class FROM article
WHERE `class` = 'PHP';
# LIMIT分页
SELECT title, img, date, class FROM article
WHERE `class` = 'PHP' LIMIT 2;
SELECT title, img, date, class FROM article
WHERE `class` = 'PHP' LIMIT 0,2;
# ORDER BY排序语句
# ASC 正序(默认)--ascending
# DESC 逆序--descending
SELECT * FROM arctile
WHERE `class` = 'PHP'
ORDER BY `date` DESC;
2. 插入
INSERT INTO article (`title`, `img`, `content`, `date`, `class`)
VALUES('the_title', 'the_img', 'the_content', '2022-10-15', 'PHP');
3. 修改
UPDATE article
SET `title` = `new_title`, `content` = 'new_content'
WHERE `title` = 'the_title'; # 若不增加WHERE条件,则会修改整个表
4. 删除
DELETE FROM article
WHERE `title` = 'the_title'; # 若不增加WHERE条件,则会删除整个表