2015-11-02 22 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

相關問題