PHP
常用函数:
preg_match():用于执行正则表达式匹配
preg_match($pattern, $subject)
//$pattern是正则表达式,$subject是要匹配的字符串
parse_str():直接将查询参数解析到当前作用域变量中
$_GET['id']时有:
id=a[]=www.polarctf.com
is_numeric:bool is_numeric ( mixed $var )
//如果变量是数值或数值字符串,则返回 true,否则返回 false
strrev:PHP 中用于反转字符串的函数
strrev("Hello World!")
strstr():在PHP中用于查找一个字符串在另一个字符串中首次出现的位置,并返回从该位置开始到字符串末尾的剩余部分。
stristr():strstr()的不区分大小写(case-insensitive)版本。
mb_strpos:用于在多字节字符串(如 UTF-8 编码的字符串)中查找子字符串首次出现位置的函数
mb_strpos(
string $haystack,
string $needle,
int $offset = 0,
?string $encoding = null
): int|false
//$haystack:要搜索的主字符串。
//$needle:要查找的子字符串。
//$offset(可选):开始搜索的位置(以字符为单位,不是字节)。
//$encoding(可选):字符编码,如 'UTF-8'。如果省略,使用内部默认编码(可通过 mb_internal_encoding() 获取或设置)。
//返回值:如果找到,返回子字符串在主字符串中的字符位置(从 0 开始),如果未找到,返回 false。
//例:$pos = mb_strpos($string, "世界", 0, $encoding);
mb_substr:PHP 中用于安全截取多字节字符串(如 UTF-8 编码的中文、日文等)的函数
mb_substr(
string $string,
int $start,
?int $length = null,
?string $encoding = null
): string
//$string:要截取的原始字符串。
//$start:开始位置(以字符为单位,不是字节)。
正数:从字符串开头开始计数(0 表示第一个字符)。
负数:从字符串末尾开始倒数(-1 表示最后一个字符)。
//$length(可选):要截取的字符数。
如果为正数,表示从 $start 开始取这么多字符。
如果为负数,表示从 $start 开始,到距离字符串末尾 $length 个字符处停止。
如果省略或为 null,则从 $start 一直取到字符串末尾。
//$encoding(可选):字符编码(如 'UTF-8')。若省略,使用 mb_internal_encoding() 的默认值。
例:echo mb_substr($str, 0, 2);
putenv:PHP中的一个函数,用于设置环境变量。
bool putenv ( string $setting )
//例putenv('PATH=/home/rceservice/jail');
pahinfo():将传入的路径“字典化”
//var_dump(pathinfo(‘sandox/cfbb870b58817bf7705c0bd826e8dba7/123.txt’));
//array(4) {
["dirname"]=>
string(39) "sandox/cfbb870b58817bf7705c0bd826e8dba7"
["basename"]=>
string(7) "123.txt"
["extension"]=>
string(3) "txt"
["filename"]=>
string(3) "123"
}
file_put_contents():将结果放进文件中
格式:file_put_contents(
string $filename,
mixed $data,
int $flags = 0,
resource $context = ?
): int|false
//$filename(string):要写入的文件路径。如果文件不存在,PHP 会尝试创建它(需有相应目录的写权限)。
//$data(mixed):要写入的数据
//$flags(int,可选):控制写入行为的位掩码标志,常用选项包括:
FILE_USE_INCLUDE_PATH:在 include_path 中搜索文件
FILE_APPEND:追加写入(而不是覆盖)
LOCK_EX:写入时加排他锁(防止并发写冲突)
多个标志可用 | 组合
//$context(resource,可选):流上下文(stream context),用于高级 I/O 操作(如 HTTP、FTP 等),一般本地文件操作不需要。
//成功时返回写入的字节数(int),失败时返回 false(例如权限不足、磁盘满、路径无效等)
//例:file_put_contents('example.txt', "Hello, world!n");
addslashes:PHP中的一个字符串处理函数,用于在字符串中的某些特定字符前添加反斜杠),以确保这些字符在后续的处理过程中不会引起语法错误或安全问题。这些特定字符包括单引号(')、双引号(")、反斜杠()和NULL字节。
extract():用于从数组中提取元素并将它们导入到当前的符号表中,即将数组的键名作为变量名,键值作为变量值。很可能会覆盖变量!!!
格式:extract(array $array, int $flags = EXTR_OVERWRITE, ?string $prefix = null): int
参数:
array $array:必须是一个关联数组(键为字符串),函数会将数组的每个键作为变量名,对应的值作为变量值,在当前作用域中创建这些变量。
如果键是数字(如 0, 1)或非法变量名(如以数字开头、包含空格等),默认会被忽略(除非使用 EXTR_PREFIX_INVALID 等标志)。
int $flags = EXTR_OVERWRITE:控制当要创建的变量名已存在时的行为
EXTR_OVERWRITE(默认):覆盖已存在的变量
EXTR_SKIP:跳过已存在的变量,保留原值
EXTR_PREFIX_SAME:如果变量已存在,则用 $prefix 前缀新变量
EXTR_PREFIX_ALL:所有变量都加上 $prefix_ 前缀
EXTR_PREFIX_INVALID:仅对非法变量名(如 123abc)加前缀
EXTR_IF_EXISTS:仅当变量已存在时才导入(用于更新已有变量)
?string $prefix = null:指定一个字符串前缀,新变量名将变为:$prefix . '_' . 原键名,前缀不能以数字开头,且应符合变量命名规则(字母或下划线开头)。
返回值:该函数返回成功提取的变量数目。
//例:$data = [
'name' => 'Alice',
'age' => 30,
'city' => 'Paris'
];
extract($data);
echo $name; // Alice
echo $age; // 30
echo $city; // Paris
assert():PHP 中用于断言的内置函数,assert()函数会将读入的代码当作php执行
uniqid():是 PHP 中的一个函数,用于生成一个唯一的 ID,通常用于创建唯一的标识符
date():是一个非常重要的日期和时间处理函数,它能够格式化一个时间戳为更易读的日期和时间形式
参数:d:表示一个月中的第几天,两位数字,如果是一天则前面补零,如 01 到 31。
m:表示一年中的第几个月,两位数字,如 01 到 12。
Y:四位数字完整表示年份,如 2023。
H:表示小时,24 小时制,两位数字,如 00 到 23。
i:表示分,两位数字,如 00 到 59。
s:表示秒,两位数字,如 00 到 59。
a:表示 AM 或 PM(上午或下午)。
l:(小写的 L):完整的星期几的文本名称,如 Monday。
M:三个字母缩写的月份名称,如 Jan。
g:用于获取小时部分,范围是从 1 到 12。
//在data函数内使用上述字母需要转义
stream_context_create:是PHP中用于创建一个流(stream)上下文的函数。流上下文是为文件流(比如网络请求)配置选项的一个集合,它可以让开发者对流的行为进行自定义,比如设置请求头、超时时间、用户认证等。
格式:
resource stream_context_create ( array $options [, array $params ] )
//参数 options 是一个关联数组,用于指定不同协议(如 HTTP、FTP 等)的上下文选项,默认值为 NULL。例如,对于 HTTP 请求,可以设置 header 选项来添加请求头信息。
//参数 params 是一个关联数组,用于指定上下文的参数,如通知回调函数等,默认值为 NULL。
//例:
$options = [
'http' => [
'method' => 'GET',
'header' => "User-Agent: PHPrn",
'timeout' => 30
]
];
$context = stream_context_create($options);
$content = file_get_contents('https://www.example.com', false, $context);
//在这个例子中,stream_context_create 创建了一个用于 HTTP 协议的上下文,设置了请求方法为 GET、添加了用户代理头,并设置了超时时间为 30 秒。然后使用 file_get_contents 函数和这个上下文来获取网页的内容。
strcmp:是一个用于比较两个字符串的函数。
格式:int strcmp ( string $str1 , string $str2 )
返回值:
如果返回值小于 0,表示 $str1 小于 $str2。
如果返回值等于 0,表示 $str1 和 $str2 相等。
如果返回值大于 0,表示 $str1 大于 $str2
getallheaders():获取当前请求的所有 HTTP 标头,并返回一个数组
pos():PHP中的一个内置函数,用于返回数组中当前元素的值。它是 current() 函数的别名,二者功能完全相同,返回数组中当前指针所指向的元素的值。如果指针超出了数组的范围,则返回 false
array_reverse():用于反转数组的顺序。它接收一个数组作为参数,并返回一个新的数组,其元素顺序与原数组相反
exit():终止脚本运行
instanceof:PHP 中用于检查对象是否属于某个类的操作符。
passthru:执行系统命令
call_user_func($func, $p):
执行$func函数,且以$p为参数
$_GET as $re => $str:
遍历每个get参数,将键当作re,值当作str
eval:语言结构,执行里面的php语句
$func = 'eval';
$func('phpinfo();'); //报错:Call to undefined function eval(),eval作为语言结构无法调用
一些比较绕过:
strcmp()函数比较两个字符串,若参数类型不同会进行类型转换,函数返回NULL,比较时NULL与空字符串视为相等,可通过比较。
如:
strcmp($a,$password)==0
可以构造:$a=1[]或2[]
strlen($args[0]) < 4 && ($args[0] + 1) > 10000这样比较字符串长度又让其值大于某值时可以够造$args[0]=0e4,这样进行算数运算时会自动以科学计数法计算
原理:
PHP 在进行 数学运算(如 +)时,会自动将字符串转换为数字,且转换规则很“宽容”:
如果字符串以数字开头,PHP 会取开头的数字部分,忽略后面非数字内容。
intval($num):
intval在解析科学计数法时,若仅有12e3,那么会返回e前面的数字,这里为12,若是科学计数法加数学运算,那么就会真实解析为数字,如12e3+1解析为12001