CTF常用php函数

406 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

strstr/stristr(string,search,before_search)

函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。

结果:world!

str_replace

str_replace(find,replace,string,count)

替换字符串中的一些字符(区分大小写)。

isset(var1,var1,var,...)

判断一个变量是否已经声明的时候 可以使用 isset函数

empty(var1,var1,var,...)

判断一个变量是否已经赋予数据且不为空 可以用 empty 函数

//当要 判断 一个变量 存在且不为空 先isset 函数 再用 empty 函数

preg_match(要搜索的字符串,字符串)

执行正则表达式匹配如果成功则返回1,否则返回0//结果:

查找到匹配的字符串

未发现匹配的字符串

/u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字)
/i 表示不区分大小写(如果表达式里面有 a, 那么 A 也是匹配对象)
/s 表示将字符串视为单行来匹配

分隔符

| @ % / #~

Substr(a,b,c)

substr(截取的字符串,开始位置,截取长度):字符串截取函数

例:

substr("Hello world",0,-1)//返回结果Hello worl

substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串

substr('Hello World',1,1) //返回结果为 'H'  *0和1都是表示截取的开始位置为第一个字符

substr('Hello World',2,4) //返回结果为 'ello'

substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符

Left(a,b)

从字符表达式最左边一个字符开始返回指定数目的字符.若 b 的值大于 a 的长度,则返回字符表达式的全部字符a.如果 b 为负值或 0,则返回空字符串.

例:

left("1234",2)// 返回结果为'12' *从字符串第一个字符开始截取长度为2的字符串

if(a,b,c)

如果 a 是TRUE ,则 if()的返回值为b; 否则返回值则为 c。if() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

length("")

输出一个字符串的长度

length("security")//结果为8

file_get_contents()

把整个文件读入一个字符串中。

echo file_get_contents("a.txt");//输出a.txt内的内容,如果加上'r'则表示只读

addslashes()

在指定的预定义字符前添加反斜杠

$str = addslashes('Shanghai is the "biggest" city in China.');
echo($str);

//结果:Shanghai is the "biggest" city in China.

预定义字符

  • 单引号 (')
  • 双引号 (")
  • 反斜杠 ()
  • NULL

system

system(string $command , int &$return_var=?)

system — 执行外部程序,并且显示输出

command:要执行的命令

return_var:如果提供return_var函数,则外部命令执行后的返回状态将会被设置到此变量中。

scandir

scandir(directory,sorting_order,context)

函数返回指定目录中的文件和目录的数组。

directory

必需。规定要扫描的目录

sorting_order

规定排列顺序。默认是0,表示升序排列;1是降序排列

context

规定目录句柄的环境,context是可修改目录流的行为的一套选项

dirname()

返回路径中的目录部分

<?php
echo dirname("c:/testweb/home.php");
echo dirname("/testweb/home.php");
?>

结果:

c:/testweb
/testweb

array_reverse( array,preserve )

array:规定数组。

preserve:规定是否保留原始数组的键名。可能的值true;false

<?php
$a=array("Volvo","XC90",array("BMW","Toyota"));
$reverse=array_reverse($a);
$preserve=array_reverse($a,true);
print_r($a);
print_r($reverse);
print_r($preserve);
?>
//输出原始数组、翻转数组、保留原始数组键名的翻转数组

next

输出数组中的当前元素和下一个元素的值

相关函数:

  • prev() - 将内部指针指向数组中的上一个元素,并输出
  • current() - 返回数组中的当前元素的值
  • end() - 将内部指针指向数组中的最后一个元素,并输出
  • reset() - 将内部指针指向数组中的第一个元素,并输出
  • each() - 返回当前元素的键名和键值,并将内部指针向前移动

结果:

move_uploaded_file()

函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。

move_uploaded_file(file,newloc)

file:要移动的文件

newloc:规定文件的新位置

pathinfo

以数组的形式返回文件路径的信息。

  • PATHINFO_DIRNAME - 只返回 dirname
  • PATHINFO_BASENAME - 只返回 basename
  • PATHINFO_EXTENSION - 只返回 extension
  • PATHINFO_FILENAME - 只返回 filename
$p1 = pathinfo('atlas/这是文件夹/可爱胖胖是怎么变帅的#超能陆战队.mp4');
$p2 = pathinfo('atlas/dirname/sssss#ddddd.mp4');
print_r($p1);
print_r($p2);

结果:

<?php print_r(pathinfo("/testweb/test.txt")); ?>

结果:

 

empty isset

判断传入的字符串是否为空in_arry函数需要传入2个数据,第一个为需要查找的目标,第二个为在什么中查找

mb_substr()

返回字符串的一部分。

mb_substr(字符串,开始位置,结束为止)

echo mb_substr('abcdefghijk',0,9)."";  //abcdefghi
echo mb_substr('abcdefghijk',1,5)."";  //bcdef
echo mb_substr('我们都是中国人',0,9)."";  //我们都是中国人
echo mb_substr('我们都是中国人',0,9,'gb2312')."";  //我们都是中
echo mb_substr('我们都是中国人',0,9,'utf-8');  //我们都是中国人

mb_strpos (haystack ,needle )

返回要查找的字符串在别一个字符串中首次出现的位置。

mb_strpos (haystack ,needle )

$str = '飞鸟慕鱼博客';
echo mb_strpos($str,'慕鱼');

结果:2

Is_valid

检查对象变量是否已经实例化,即实例变量的值是否是个有效的对象。如果指定对象已经创建了对此案实例,那么IsValid()函数返回True,否则返回FALSE。如果参数obejctname的值为NULL,IsValid()函数返回NULL。

implode()

把数组元素组合为字符串。

<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>

结果:Hello World! I love Shanghai!

extract

从数组中把变量导入到当前的符号表中。

extract(array,extract_rules,prefix)

EXTR_PREFIX_SAME

如果有冲突,在变量名前加上前缀 prefix 。

prefix

如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。

前缀和数组键名之间会自动加上一个下划线。

extract($_POST);
//相当于$username = $_POST['username'];
//$password = $_POST['password'];

 

<?php 
/* 假定 $var_array 是 wddx_deserialize 返回的数组*/ 
$size = "large"; 
$var_array = array("color" => "blue", 
"size" => "medium", 
"shape" => "sphere"); 
extract($var_array, EXTR_PREFIX_SAME, "wddx"); 
echo "$color, $size, $shape, $wddx_size\n"; 
?>

结果:blue, large, sphere, medium

size没有被覆盖,因为指定了EXTRPREFIXSAME,这使得size 没有被覆盖,因为指定了 EXTR_PREFIX_SAME,这使得 wddx_size 被建立

intval

函数用于获取变量的整数值。

返回值

成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。

最大的值取决于操作系统, 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。

在32位的系统上, intval('1000000000000') 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。

字符串有可能返回 0,虽然取决于字符串最左侧的字符。

is_numeric ()

函数用于检测变量是否为数字或数字字符串。

curl_exec

抓取URL并把它传递给浏览器

parse_url

功能是解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分

分别提取以下成分

scheme - 如 http
host
port
user
pass
path
query - 在问号 ? 之后
fragment - 在散列符号 # 之后

parse_str() 

把查询字符串解析到变量中

<?php
parse_str("name=Bill&age=60");
echo $name."<br>";
echo $age;
?>

结果:

若输出parse_str的值返回NULL

<?php
    $parsed = parse_url($_SERVER['REQUEST_URI']);
    if(isset($parsed["query"])){
        $query = $parsed["query"];
        $parsed_query = parse_str($query);
        var_dump($parsed_query);
        echo $parsed_query;           //NULL
        echo $a;                     //qwe
    }?>

$_REQUEST

相当于php的超全局变量,可以获得get请求也可以获得post请求

$_SERVER

$_SERVER['REQUEST_URI']  取得当前URL的 路径地址

如:http://127.0.0.1/4.php?action=auth&key=0&hashed_key=e9

执行后得到

/4.php?action=auth&key=0&hashed_key=e9

$_SERVER[‘PHP_SELF’] 获取当前页面地址,是当前php文件相对于网站根目录的位置地址

$_SERVER[‘REQUEST_URI’] 完整url地址,包括请求的url参数

$_SERVER[‘HTTP_HOST’] 只是一段的域名,不包括前面的协议和后面的相对位置

_SERVER['HTTP_X_FORWARDED_FOR']或_SERVER["REMOTE_ADDR"] 获取ip地址

$_SERVER['DOCUMENT_ROOT'] // 根目录的路径

http://localhost/aaa/index.php?p=222&q=333

$_SERVER["QUERY_STRING"]  获取查询 语句,实例中可知,获取的是?后面的值

$_SERVER["REQUEST_URI"]   获取 http://localhost 后面的值,包括/

$_SERVER["SCRIPT_NAME"]   获取当前脚本的路径,如:index.php

$_SERVER["PHP_SELF"]      当前正在执行脚本的文件名

结果:

$_SERVER['QUERY_STRING'] = "p=222&q=333";

$_SERVER['REQUEST_URI']  = "/aaa/index.php?p=222&q=333";

$_SERVER['SCRIPT_NAME']  = "/aaa/index.php";

$_SERVER['PHP_SELF']     = "/aaa/index.php";

 

escapeshellarg() 

将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号

escapeshellcmd() 

对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$, \x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。

explode()

explode(separator,string)函数把以separator为分隔字符串将字符串打散为数组。

结果:Array ( [0] => Hello [1] => world. [2] => I [3] => love [4] => Shanghai! )

pathinfo()

返回一个关联数组包含有 path 的信息。 包括以下的数组元素:

  • [dirname] //路径名
  • [basename] //文件名
  • [extension] //扩展名
<?php
print_r(pathinfo("/testweb/test.txt"));
?>

结果:

pathinfo()

以数组的形式返回文件路径的信息

ReflectionClass 

类报告了一个类的有关信息。