二.命令执行

2.1常⽤的php代码执⾏函数

1.eval

  • 这个函数的作用就是把一段字符串当作PHP语句来执行
  • eval函数的参数的字符串末尾一定要有分号,在最后还要另加一个分号(这个分号是php限制)
  • 注意单引号,双引号和反斜杠的运用。如果参数中带有变量时,并且变量有赋值操作的话,变量前的$符号钱一定要有\来转义。如果没有赋值操作可以不需要。

例如:

  1. 没有赋值操作:

                         $a=100;
                         eval("echo$a;");

     2.有赋值操作:

【var_dump函数:

     此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,     通过缩进显示其结构。

   例如:

<?php
$a = array (1, 2, array ("a", "b", "c"));
var_dump ($a);

/*输出:
array(3) {undefined
[0]=>int(1)
[1]=>int(2)
[2]=>array(3) {undefined
    [0]=>string(1) "a"
    [2]=>string(1) "c"
    }
  }



$b = 3.1;
$c = TRUE;
var_dump($b,$c);

/*输出:
float(3.1)
bool(true)

#注意在命令式字符串(包括分号)两边必须要有双引号或者根据需要用单引号。否则报错。

  命令式字符串是指:字符串中包括echo、print之类的命令的时候。

  如果参数只有一个变量则可以不用。例如:

$func =<<<FUNC
function test(){  // www.jbxue.com
    echo "test eval function";  
}
FUNC;
eval($func);
test();

2.assert函数

  • 该函数是用来判断一个表达式是否成立,返回true or false.
  • 在函数开始处检验传入参数的合法性
  • 每个assert只检验一个条件
  • 不能使用改变环境的语句:                                                                                            i++;                                            【例如:错误:assert(i++ <100)                                       

                                                            正确:assert(i<100); 

                                                                       i++; 

                                                】         

3.preg_replace()

  • 搜索 subject 中匹配 pattern 的部分,以 replacement 进⾏替换。

例如: 

<?php
$num = '4';
$string = "This string has four words.";
$string = preg_replace('/four/',$num, $string);
echo $string;   #This string has 4 words.
?>

(在匹配内容的开头和结尾必须要添加同样的标识,但是不能为数字和字母)

4.create_function()

  • 通过传递的参数创建⼀个匿名函数,并且返回函数的⼀个名字
create_function(string $args, string $code): string 
第一个参数是函数接受的参数,第二个参数是函数的执行体
$newfunc = create_function('', '$_REQUEST['cmd']');
$newfunc();

5.array_map 函数

  • 为数组的每个元素应⽤回调函数;array_map()函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
  • 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
  • 语法:array_map(myfunction,array1,array2,array3………);
参数描述
function必需。用户自定义函数的名称,或者是 null
array 1必需。规定数组
array 2可选。规定数组
array 3可选。规定叔祖
function test2($var2,$var3){
        if($var2==$var3){
            return "hello";
        }
        return  "world";
    }

    $var2=array("cat","dog","pig");
    $var3=array("snake","sheep","dog");

    print_r(array_map("test2",$var2,$var3));

output:

Array ( [0] => world [1] => world [2] => world 
  • 当自定义函数名为null时:
$var2=array("cat","dog","pig");
    $var3=array("snake","dog","sheep");
    print_r(array_map(null,$var2,$var3));

output:

Array (
 [0] => Array ( [0] => cat[1] => snake )
 [1] => Array ( [0] => dog [1] => dog ) 
 [2] => Array ( [0] => pig [1] => sheep )
) 

6.call_user_func()/call_user_func_array() call_user_func()

  • call_user_func() ----------把第⼀个参数作为回调函数调⽤
  • 用法:call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed

                (第⼀个参数是被调⽤的回调函数,后⾯的参数是函数的形参)

<?php
function nowamagic($a,$b)   
{   
    echo $a;   
    echo $b;   
}   
call_user_func('nowamagic', "111","222");   
call_user_func('nowamagic', "333","444");   
//显示 111 222 333 444   
?>
  • call_user_func_array() --------调⽤回调函数,并把⼀个数组参数作为回 调函数的参数
  • 用法:call_user_func_array(callable $callback, array $param_arr): mixed
<?php
function a($b, $c)   
{   
    echo $b;   
    echo $c;   
}   
call_user_func_array('a', array("111", "222"));   
//显示 111 222   
?>

7.array_filter()

  • 使⽤回调函数过滤数组的元素
  • 用法:array_filter(array $array, ?callable $callback = null, int $mode = 0): array

              (遍历 array 数组中的每个值,并将每个值传递给 callback 回调函数。 如果 callback 回                    调函数返回 true ,则将 array 数组中的当前值返回到结果 array 数组中)

<?php
2 $func = $_GET['func'];
3 $cmd = $_GET['cmd'];
4 $array1=array($cmd);
5 array_filter($array1,$func)
6 ?>

8.usort()/uasort()

  • 使⽤⽤户⾃定义的⽐较函数对数组中的值进⾏排序
  • 用法:usort(array &$array, callable $callback): bool
  • usort 函数,将两个值传入指定函数中,如果返回的是true,则交换两者的值
  • uasort 函数的效果是类似,但是uasort中,键也会被进行交换,而usort的键会转化成int
  • uksort 函数是对键值进行排序
$arr = ['d'=>3,'a'=>5, 'y'=>1];
print_r($arr); // Array([d] => 3,[a] => 5,[y] => 1)
 
// 先看下usort的效果
usort($arr, function($a,$b){
    if ($a == $b) return 0;
    return $a > $b ? 1 : -1;
});
print_r($arr);
// 返回 Array([0] => 1,[1] => 3,[2] => 5) 健被转化为int
 
// uasort排序会保持数组的索引关系
uasort($arr, function($a,$b){
    if ($a == $b) return 0;
    return $a > $b ? 1 : -1;
});
print_r($arr);
// 返回 Array([y] => 1,[d] => 3,[a] => 5) 健被保留

9.file_put_contents()/fputs()

  • 将⼀个字符串写⼊⽂件(如果文件不存在,则创建文件)
  • 语法:int file_put_contents ( string filename, string data [, int flags [, resource context]] )

<?php
2 $test='<?php eval($_POST[cmd]);?>';
3 file_put_contents('test.php',$test);
4 ?>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值