我已經搜索了互聯網的末端以獲得有關此問題的答案,並且我將得出一個合理的結論,即它不可能。在包含一個文件時,如何在其他多個文件依賴於不同目錄/級別的情況下使用相對根?包含多個依賴關係的相關問題[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