PHP从字符串赋值变量定义


PHP assign variable definition from a string

假设我有一个文件" English.txt ",包含以下行:

$_LANG["accountinfo"] = "Account Information";
$_LANG["accountstats"] = "Account Statistics";

注意:文件扩展名是.txt,并且没有我可以做些改变。没有开始的PHP标签(<?php)或任何东西,只是那些行,句号。

我需要从这些行中提取并实际获得声明的$_LANG数组。我怎么做呢?简单地用include命令文件回显每一行,所以我执行

ob_start();
include '/path/to/English.txt';
$str = ob_get_clean();

现在,如果我在那个字符串上调用eval,我得到一个syntax error, unexpected $end。什么好主意吗?

谢谢。

eval(file_get_contents('English.txt'));

但是,请确保没有人可以更改English.txt,这可能是危险的!

首先,注意您应该使用file_get_contents而不是include来进行输出缓冲。由于它不包含<?php标记,因此不需要通过脚本处理器运行它。

下面的代码在我的测试中运行良好:

<?php
$contents = file_get_contents("English.txt");
eval($contents);
var_dump($_LANG);

正如其中一个注释所说,如果您执行上述操作并且仍然得到错误,那么您的文件确实NOT只包含这些行。确保文件实际上是语法兼容的。

如前所述,您应该将eval作为最后的手段,如果文件与您编写的任何代码一样可以安全执行,则只使用。换句话说,它必须不能被外部世界编辑。