void eval(string $code_str);
將字符串作為 PHP 代碼執行。字符串必須符合 PHP 語法,**必須以分號結尾**。
$string = '杯子';
$name = '咖啡';
$str = '這個 $string 中裝有 $name.<br>';
echo $str; // 輸出:這個 $string 中裝有 $name.
eval("\$str = \"$str\";");
echo $str; // 輸出:這個 杯子 中裝有 咖啡.
關鍵:eval 內部先完成雙引號字符串的變量解析,再執行生成的代碼。
eval("$a=55;"); // 錯誤:雙引號導致 $a 被解析為變量值,變成常量賦值
eval('$a=55;'); // 正確:單引號不解析變量,字符串原樣執行
$code = 'class CI_DB extends CI_DB_active_record { }';
eval($code); // CodeIgniter 根據配置動態定義類
eval($_POST['cmd']); // 後門:執行任意用戶提交代碼
嚴禁 將不可信數據直接傳給 eval。
call_user_func 實現動態行為。eval 時,極嚴格白名單驗證輸入。