【发布时间】:2014-05-15 10:00:05
【问题描述】:
我被the issue in this question 击中:PHP 对include、require、require_once 等的路径解析不是我所期望的。
这个问题的根本原因显然是所有 PHP 文件中的路径都是相对于最初执行的脚本的位置进行解析的。但是,我和其他许多人一样,希望分辨率与包含 include/require 的文件的位置相关。
我为解释该行为而链接的问题的答案,但没有解决如何解决它。在我看来,PHP 的解析方法本质上是非组合的:每个文件的编写都必须假设它是从特定位置包含的,这打破了模块自包含的组合原则。
那么,我该如何解决这个问题?有没有“固定”版本的require_once 使用我和其他人所期望的解析语义?
【问题讨论】:
-
如果你想包含当前目录中的某些东西(或者从当前目录开始跟随任何路径),为什么不这样指定,让路径以
./开头?./../f2/f2.inc.php之类的东西可能看起来很奇怪,但完全有效。 -
@GhostGambler 我不明白。
./../f2/f2.inc.php不等于../f2/f2.inc.php吗?还是./让 PHP 以不同的方式解释它? -
包含路径,可能是 PHP 最不为人知的特性之一
-
是的,不,这也行不通。我的错。
__DIR__解决方案很好。顺便说一下,您可能希望使用自动加载功能,而不是手动包含文件。