在PHP eval函数中遇到了困扰
由于陷入了使用旧代码eval函数的困境,我混乱地分享了一下。
举个例子,我们定义一个这样的函数…
function foo($code, $val) {
$res = eval($code);
echo $res . PHP_EOL;
}
正常调用。
//出力したい文字列
$val = "Hello World";
//evalで実行するPHPコード(※再現するためにエスケープして埋め込んでます)
$phpCode = "echo \$val;";
foo($phpCode, $val);
Hello World
正常运行。
从这里开始是正题
因为静态解析报告中提到存在未使用的参数,所以将其删除…
- function foo($code, $val) {
+ function foo($code) {
$res = eval($code);
echo $res . PHP_EOL;
}
PHP Notice: Undefined variable: val in /file/path/index.php(7) : eval()'d code on line 1
由於 eval 函數將字符串作為 PHP 代碼執行,所以無法解析嵌入在字符串中的變量,這是一個陷阱,其結果沒有任何輸出。
总结
老旧代码的调试真的很困难,真的太可怕了。
PHP手册上也写着这很危险,而且只能想到少数场景才需要使用,所以以后应该不会再用了…