我正在開發一個PHP網站,在Mac OS上使用Eclipse。PHP如何處理我的項目中包含文件和相對路徑
我想知道什麼是處理包含句子的正確方法。
我有一個php文件,這是我的主'lib'腳本。該文件通過包含命令訪問其他文件。問題在於如何引用此子文件,因爲include中的相對路徑基於入口點腳本,而不是當前腳本。
因此,讓我們說我有一個mainlib.php文件,該文件訪問sublib.php文件。這將是類似的東西:
Project Root: [libs] mainlib.php sublib.php [subdir] entryPointB.php entrypointA.php
我想提出的包括「sublib.php」一句mainlib.php,所以我只能包括mainlib.php,而不是既包括每次我需要它。 (在這個例子是隻有兩個文件,但是在我的實際項目中會有更多的文件
比方說我mainlib.php文件包含此:
<?php include "libs/sublib.php; ?>
它將工作時mainlib.php被稱爲從entryPointA.php,但如果從EntryPointB稱爲如果mainlib.php包含失敗
:
<?php include "../libs/sublib.php; ?>
它將工作在EntryPointB.php,但在entrypointA.php失敗。
我該如何解決這個問題?
一些可能我試過或想過:
- 使用絕對路徑 - 那倒是一個很好的解決辦法,因爲我將不得不更改文件每次我上傳到生產。
- prepend $ _SERVER ['DOCUMENT_ROOT']包含路徑 - 在Mac上它返回/ Library/WebServer/Documents,但我的網站位於UserFolder/Sites/MySiteName中。
- 從
__DIR__
獲取目錄變量 - 不起作用,因爲它返回入口點文件,而不是項目根目錄。 - 全局配置 - 我想將硬編碼根路徑放入全局變量中。這個想法是在全局腳本中定義這個變量,而在生產中我只需要更新這個腳本。但它仍然是同樣的問題,我如何參考這個腳本而不會遇到路徑問題?
使用['__DIR__'(http://php.net/manual/en/language.constants.predefined.php)和['目錄名()'](http://php.net/manual/en/function.dirname.php)從相對路徑建立絕對路徑。 – axiac
這就是爲什麼有這樣的概念,如環境配置(也vagrant /碼頭等),所以你可以處理這些差異(或在虛擬化的情況下,只是沒有他們)。 –
您是否檢查過這個'<?php include「/libs/sublib.php;?>?? –