php代码执行

1.eval() 

这个最简单,把传递上来的字符串当作代码来执行 ,php5   7都能使用,需要注意的是eval是一个语言构造器而不是一个函数,不能被可变函数调用

eval和assert的区别  asseert可以拆分调用 比如

<?php
$a='ass';
$b='ert';
$c=$a.$b;
$c(phpinfo());

eval不行,eval必须完整调用

<?php
if(isset($_GET['id'])){
    eval($_GET['id']);
}else{
    echo '请输入参数  id';
}

2.assert()

虽说是在php7上已弃用,会报警告,但是仍然可以使用,实测在php8才正式弃用

<?php
$a=$_GET['id'];
assert($a);

使用方法与eval类似,是一个函数,可当作回调函数使用

3.preg_replace()   /e选项

php5会警告,php7正式弃用

这是一个正则表达式,但是有个 /e选项,可以吧替换的字符串当作代码来执行

<?php
$a=$_GET['id'];
echo preg_replace('/test/e',$a,'htllo;test1');

http://127.0.0.1/111/code_exec_2.php?id=phpinfo();

PHP 5.5.0 起, 传入 "\e" 修饰符的时候,会产生一个 E_DEPRECATED 错误; PHP 7.0.0 起,会产生 E_WARNING 错误,同时 "\e" 也无法起效。

4.create_function()

 php5  7.0正常,7.2-7.4开始提示弃用  8.0正式弃用

创建一个匿名函数,第一个参数是函数传递的参数,第二个参数当作函数体执行

<?php
$aa='echo eval($a);';
$func=create_function('$a',$aa);
$a=$_GET['id'];
$func($a);

5. array_map()

通过第一个参数的回调函数执行第二个参数数组的内容

php 5  7 8可用

<?php
$a[]=$_GET['id'];
array_map('assert',$a);

6.call_user_func() / call_user_func_array()

(PHP 4, PHP 5, PHP 7, PHP 8)

第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

将第二个参数的内容交给第一个参数执行

<?php
$a=$_GET['id'];
call_user_func('assert',$a);

7.array_filter()

从7.2开始无法使用assert动态执行

将第一个参数交给第二个参数执行

<?php
$a[]=$_GET['id'];
array_filter($a,'assert');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值