2015-11-02 137 views
0

我怎么能改写这个PHP代码:如何改写depricated的preg_replace与preg_replace_callback - 图案/ E

$str1 = "/.*/e"; 
$str2 = "eval('phpinfo();')"; 
preg_replace($str1, $str2,''); 

随着preg_replace_callback功能?

我测试:

preg_replace_callback($str1 , 'callback', ''); 
// the callback function 
function callback ($matches) { 
    return $str2; 
} 

但错误是:

警告(!):preg_replace_callback():修改/ E不能使用 与更换回调

我该如何解决这个错误?

+1

你仍然需要从你的正则表达式中删除结束'e'在'$ str1'。 –

+0

你只是想''phpinfo()'成一个字符串? – chris85

+0

我不确定我关注。 'preg_replace_callback'不需要eval标志。只需在回调函数中输入想要执行的代码即可。 –

回答

1

这将返回phpinfo

preg_replace_callback('//', 'callback', ''); 
function callback ($matches) { 
    return eval('phpinfo();'); 
} 

为什么你会怎么做,而不是

eval('phpinfo();'); 

我不明白这一点,你似乎并不想说..

甚至执行函数并将缓冲区捕获到变量中,

ob_start(); 
phpinfo(); 
$variable = ob_get_contents(); 
ob_get_clean(); 

从这里,与其他方法为好,How to get phpinfo() variables from php programatically?

preg_replace_callback($str1 , 'callback', ''); 
// the callback function 
function callback ($matches) { 
    return $str2; 
} 

因为$str2没有被传入,如果它是将它返回纯文本不工作。

$str1 = "/.*/"; 
$str2 = "eval('phpinfo();')"; 
echo preg_replace_callback($str1, 
          function ($matches) use ($str2) { 
           return $str2; 
          }, ''); 

,输出是:的eval( '的phpinfo();')

+0

Thanks @ chris85但是最后一个代码的输出是一个字符串,这就是为什么我在堆栈中问这个问题。 – MoonLight

+0

是的,我说'不工作,因为$ str2没有被传入,如果它将被作为纯文本返回。“..其他人是输出。我发布了其他3个将'phpinfo'赋予变量的答案。 – chris85

相关问题