我已经搜索了互联网的末端以获得有关此问题的答案,并且我将得出一个合理的结论,即它不可能。在包含一个文件时,如何在其他多个文件依赖于不同目录/级别的情况下使用相对根?包含多个依赖关系的相关问题[PHP]
作为一个例子,这里是我的网站的简化树:
Main site (PHP reports the main root to be: /Users/Luke/Sites/)
-> index.php
-> directoryfolder - > secondaryindex.php
-> templates -> header.php
-> navigation.php
即如果有人在Finder中导航到index.php,他们会将目录看作/Users/Luke/Sites/SiteAlpha/index.php。
这两个index.php & directoryfolder/secondaryindex.php包括header.php,然后包括navigation.php。问题似乎是,无论我在header.php中包含navigation.php的包含位置,它只会允许一个页面正确显示它。 IE:
如果index.php中的navigation.php被调用(通过header.php),并且ROOT_PATH的包含位置为'/ templates/navigation.php(其中ROOT_PATH等于dirname(__DIR__
)),根本不会显示。但它将工作在secondaryindex.php。
反之亦然。如果index.php上的navigation.php被调用(通过header.php),并且包含位置为ROOT_PATH。'/ siteAlpha/templates/navigation.php,它将实际上工作。但是,它不会在secondaryindex.php上工作。
TL; DR,由于header.php被不同目录层上的多个页面调用,导航.php的include必须同时是我的第一个例子和我的第二个例子。
我试过使用$ _SERVER ['DOCUMENT_ROOT'],dirname(__DIR__
),__FILE__
,我自己定义的根常量,没有任何成功。我读过并阅读过无数的文章和SO问题,但没有任何帮助。它只是不起作用。
有人可以关心给我一个ELI5解释我需要做些什么来让它工作吗?谢谢。
谢谢,我试过你的第一个想法,关于同一个常量的两个定义,但它仍然行不通!奇怪的是,包含现在在index.php和secondaryindex.php上都有完全相同的路径(/Users/Luke/Sites/siteAlpha/templates/navigation.php),如快速回显所证实的,但实际上它只是实际出现并在index.php上运行!有任何想法吗? – ReactingToAngularVues 2013-02-20 11:35:18
你使用'include'还是'require'?在这两种情况下,请将错误报告设置为最大值 - 例如“error_reporting(E_ALL)”以验证文件是否真的存在于脚本认为它们的位置。我拥有的最后一个想法是您的包含脚本中可能存在的错误。也许某些参数检查在secondaryindex.php的情况下失败。我的水晶球今天有点雾,如果你知道我的意思;) – Joshua 2013-02-20 13:31:14
感谢您的回答...我最终得到它使用您的方法在每个入口点定义一个常数!它最初并没有工作,因为我忘记了将一个特定的include包含在常量中......现在全部修复了。干杯。 – ReactingToAngularVues 2013-02-21 08:38:36