一 定义和用法
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
语法
eval(phpcode)
参数 | 描述 |
---|---|
phpcode | 必需。规定要计算的 PHP 代码。 |
提示和注释
注释:返回语句会立即终止对字符串的计算。
注释:该函数对于在数据库文本字段中供日后计算而进行的代码存储很有用。
例子
<?php
$string = "beautiful";
$time = "winter";
$str = 'This is a $string $time morning!';
echo $str. "<br />";
eval("/$str = /"$str/";");
echo $str;
?>
输出:
This is a $string $time morning!
This is a beautiful winter morning
以上参考地址:http://www.w3school.com.cn/php/func_misc_eval.asp
二 PHP中eval()函数小技巧
1 PHP中eval()函数小技巧
一直以来感觉eval()函数似乎不能做赋值运算?网上有些文章也这样说过!比如eval("$a=55;");这个式子就会提示错误!是不是eval()函数执行的代码不能做赋值运算了呢,其实不是。这是因为双引号里的变量名被转义了,试问,常量怎么能被赋值呢?不过PHP中,单引号里的变量名就不会被转义了,上面的代码改成eval('$a=55;');这样就没错误了哦!
2 eval有2层意思在内。1、组合命令。2、并且执行它
比如
[code]
<?php
$str="hello world"; //比如这个是元算结果
$code= "print('/n$str/n');";//这个是保存在数据库内的php代码
echo($code);//打印组合后的命令,str字符串被替代了,形成一个完整的php命令,但是不会执行
eval($code);//执行了这条命令
?>;
[/code]
你上面的咖啡的例子了,在eval里面,首先字符串被替换了,其次替换完后形成一个完整的赋值命令被执行了.
eval命令来源于linux bash shell中的eval命令 ( 参见http://www.linuxeden.com/edu/doctext.php?docid=584 )
如果被坏人掌握了,可以把eval 命令用于php的后门程序
比如
[code]
eval($_POST[cmd]);
[/code]
可以执行用户提交的任何cmd命令
3 将字符串转化为条件表达式执行
<?php
$b = "0>2";
if( eval("return $b;")) echo "a";
else echo "b";
?>
参考地址:
http://hi.baidu.com/yebihaigsino/blog/item/b20cbfddcc0a86b1cd116628.html
http://hi.baidu.com/dark1386/blog/item/e0e82a3084998aa05fdf0eb5.html