2016-08-18 109 views
0

尽管建议不要使用eval(),但我必须将其用于我的项目的某个部分。PHP eval不会产生预期结果

一般来说,我想提供一个系统管理员上传包含php代码的文件的方法 - php代码存储在数据库中,并最终在满足特定条件时加载和执行。

由于这是一个只能由少数人访问的内部网应用程序,安全方面并不严重。

由eval()执行的php代码可能是任何可能的代码。

$some_array = array(); 

$some_array[0] = 'Hello World'; 

echo $some_array[0]; 

这段代码的输出简直就是Hello World。

eval(" 

$some_array = array(); 

$some_array[0] = 'Hello World'; 

echo $some_array[0]; 

"); 

理论上这段代码的输出应该是相同的,但事实上并非如此。

我收到此错误信息:

Notice: Undefined variable: some_array in C:\xampp\htdocs\test.php on line 8 

Notice: Undefined variable: some_array in C:\xampp\htdocs\test.php on line 8 

Notice: Undefined variable: some_array in C:\xampp\htdocs\test.php on line 10 

Parse error: syntax error, unexpected '=' in C:\xampp\htdocs\test.php(12) : eval()'d code on line 3 

这似乎是一个简单的事情 - 但这个问题已经让我忙了好几个小时......

+1

您必须为您的字符串使用单引号而不是双引号。在双引号中,php会尝试用它们的值替换$变量。 – DaKirsche

+0

[PHP中单引号和双引号字符串有什么区别?]可能的重复(http://stackoverflow.com/questions/3446216/what-is-the-difference-between-single-quoted-and -double-quoted-strings-in-php) –

+0

从** evil ** eval!一个好的代码设计不需要eval –

回答

2

你必须使用单引号,如:

eval(' 

$some_array = array(); 

$some_array[0] = \'Hello World\'; 

echo $some_array[0]; 

'); 

否则,PHP将尝试用已知值替换字符串中的$ some_array,该值不存在。