包含 - 使用字符串而不是文件名

时间:2011-09-07 15:26:16

标签: php string include eval

我想在字符串而不是文件上运行include,但是不知道如何实现这一点。

//This is the desired functionality
include($filename);

//But I want to do something like this instead.
$file_contents = getFileFromCacheOrSomewhereElse($filename);
include($file_contents);  // Doens't work...
eval($file_contents);     // Also incorrect.

请注意:“eval”与include不同 - “include”回显文件内容(并执行任何PHP标记),而“eval”将字符串作为PHP代码执行。

示例用例是从Memcache加载模板文件(作为字符串),然后在该字符串上运行include,而不是运行include并依赖于PHP filecache。

3 个答案:

答案 0 :(得分:10)

如果您可以on设置allow_url_fopenallow_url_include php.ini设置,那么另一种选择就是data流包装器(manual)。< / p>

include 'data:text/plain,' . urlencode($file_contents);

答案 1 :(得分:7)

eval("?>" . $file_contents . "<?php ");

做到了。

答案 2 :(得分:1)

在memcache中存储PHP代码不是最好的主意 此后评估它甚至更糟。

任何操作码缓存,APC或EAccelerator都会动态缓存您的PHP文件,不会有这样的奇怪工作,甚至会解析它以加快执行速度。

EDIT。考虑到这些年后的投票结果,我认为这个问题只吸引了那些有同样奇怪想法的新人。所以我必须重申:虽然它击败了你的好主意,但

按原样保留包含

内部PHP的opcode cache将更好地缓存它们并执行得更快。