我正在尝试找出如何解释PHP's include构造 http://www.php.net/manual/en/function.include.php,例如是否是文本包含、何时评估等。像往常一样,文档相当非正式和模糊。
根据实验,它似乎是语法糖。具体来说,构造
include 'Baz.php'
是一个可以替换为的表达式
eval('?>' . file_get_contents('Baz.php', FILE_USE_INCLUDE_PATH))
它是否正确?这种替换在一般情况下是正确的,还是仅在我的测试中正确?
编辑:正如 bwoebi 指出的那样,这通常不是正确的,因为eval
已使用的代码不具有相同的__DIR__
and __FILE__
魔法常数。如果有某种方法来设置它们,我们也可以对其进行建模。
编辑2:这个问题是这个问题的重复:相当于使用 eval 的 include https://stackoverflow.com/questions/1184628/php-equivalent-of-include-using-eval。然而,那里的所有答案似乎都忽略了 bwoebi 关于文件路径上下文的观点。
是的,这应该是普遍正确的。
唯一的区别是:
- 文件上下文(现在是
eval()'ed code
,不是该文件中的代码)
- 相对路径:当您在其他目录中包含文件并且它们使用自己的相对路径时,它指向的文件现在可能不再被发现
-
file_get_contents()
不受allow_url_include
ini 设置(尽管allow_url_fopen
影响两者)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)