假设我有一个文件" 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
作为最后的手段,如果文件与您编写的任何代码一样可以安全执行,则只使用。换句话说,它必须不能被外部世界编辑。