我在 PHP 包含路径方面遇到了一些麻烦,并且不明白,那里出了什么问题。
首先,我想向您展示我的文件/目录结构:
文件/目录结构
|index.php
|foo/
|baz.php
|bar.inc.php
|asdf/
|qwerty.inc.php
/index.php:
include('foo/baz.php');
/foo/baz.php:
include('bar.inc.php');
include('../asdf/qwerty.inc.php')
的内容.inc.php
-files 在这里无关紧要。
问题是这样的:
如果我打电话/foo/baz.php
直接说,两者工作正常。但如果我打电话/index.php
,那么第一个包含有效,第二个包含失败。这是为什么?
第一条路径在包含时显然会发生转换,但第二条路径则不然。我发现这和前面的内容有关系../
,但我不知道如何解决这个问题。这可能是 PHP 的安全/配置问题吗?
顺便说一句,错误输出是:
Warning: include(../asdf/qwery.inc.php): failed to open stream:
No such file or directory in /foo/baz.php
这些包含是从运行脚本的位置进行评估的。当你include
另一个文件,您实际上是将该文件的内容拉入该位置的运行脚本中。
对于应评估相对于包含文件位置的包含的文件,您可以执行以下操作:
/foo/baz.php
include(dirname(__FILE__) . '/bar.inc.php';
include(dirname(__FILE__) . '/../asdf/qwerty.inc.php'
从文档中:
__FILE__
是文件的完整路径和文件名。如果在包含内部使用,则返回包含文件的名称。从 PHP 4.0.2 开始,__FILE__
始终包含已解析符号链接的绝对路径,而在旧版本中,在某些情况下它包含相对路径。
dirname
给定一个包含文件或目录路径的字符串,此函数将返回父目录的路径。
[http://php.net/manual/en/function.dirname.php]
[http://php.net/manual/en/language.constants.predefine.php]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)