在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手册上也写着这很危险,而且只能想到少数场景才需要使用,所以以后应该不会再用了…

 

广告
将在 10 秒后关闭
bannerAds