求助一个eval的简单问题 $t = 'echo "<p>: $te </p>";';$te = 'etst';eval ($t);如上..我想达到的效果就是上面的结果..eval太危险了..有没有别的办法呀.在线等! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 eval 没有什么危险的,他执行的都是你自己构造的代码。如果连自己都成了危险,那我也就无语了如果将同样的代码写入文件,然后 include 进来。按你的观点是否就安全了呢?eval 唯一的缺点是他所执行的代码未经预编译,临时编译必然影响效率当然并不是非要用 eval 的,比如$t = '<p>: $te </p>';$te = 'etst';echo preg_replace('/\$\w+/ise', '$0', $t);输出 <p>: etst </p>有点“模板”的味道了 哎...看来没有什么简便方法了.eval里的数据是ajx过来的..不敢直接eval.只有正则了 eval危险?????你用到的模板里支持php语法不就靠这个吗 不是..eval不危险..是数据不是我自己构的(ajax过来的)...所以危险! 类似的就行$code = 'echo 123;mysql_connect("localhost", "root", "root");';// 获取执行代码中的方法$r = '#(\w+)\([^)]*\);#';preg_match_all($r, $code, $funcArr);//echo '<pre>';print_r($funcArr);exit;// 设置可以被执行的方法或者不可以被执行的方法等$allows = array('echo', 'print', 'print_r', 'var_dump');// 或者//notAllows = array('mysql_connect', 'unlink', ...);if($funcArr[1]){ foreach($funcArr[1] as $func) { if(!in_array($func, $allows)) { exit('您正要执行无权限的代码,已经终止!'); } }}eval ($code); 我最终的做法是preg_replace('/\{(\$\w+\[?[\d\w]?\]?)\}/ise', '$1', $v)谢谢了.xuzuning php中有些函数有前缀,个中有何玄机,如mb_ 求这样的一个替换算法。 php 添加数据安全问题 PHP如何 使用全局变量 希望各位大神指点迷津,希望自己可以在产品架构方向能有所学习 大虾们来看看 如何连接另一台机器上的oracle 看起来很简单,但我解决不了!查询语句! 难问题,,高分!!!!!! 根据设备类型跳转到不同的下载地址 各位大大们,请给我分析下,下面的代码,最好能够具体点,谢谢哈。。等着的 控制器和视图之间传参时字符串前面莫名其妙多了“77u/”字符
如果连自己都成了危险,那我也就无语了如果将同样的代码写入文件,然后 include 进来。按你的观点是否就安全了呢?eval 唯一的缺点是他所执行的代码未经预编译,临时编译必然影响效率当然并不是非要用 eval 的,比如$t = '<p>: $te </p>';
$te = 'etst';echo preg_replace('/\$\w+/ise', '$0', $t);
输出 <p>: etst </p>有点“模板”的味道了
eval里的数据是ajx过来的..不敢直接eval.
只有正则了
$r = '#(\w+)\([^)]*\);#';
preg_match_all($r, $code, $funcArr);
//echo '<pre>';print_r($funcArr);exit;
// 设置可以被执行的方法或者不可以被执行的方法等
$allows = array('echo', 'print', 'print_r', 'var_dump');
// 或者
//notAllows = array('mysql_connect', 'unlink', ...);if($funcArr[1]){
foreach($funcArr[1] as $func)
{
if(!in_array($func, $allows))
{
exit('您正要执行无权限的代码,已经终止!');
}
}
}eval ($code);
preg_replace('/\{(\$\w+\[?[\d\w]?\]?)\}/ise', '$1', $v)谢谢了.xuzuning