我想在字符串而不是文件上运行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。
答案 0 :(得分:10)
如果您可以on
设置allow_url_fopen
和allow_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将更好地缓存它们并执行得更快。