2011-12-08 173 views
5

當我嘗試包含長文件路徑時,PHP包含未能加載。一個簡短的包含路徑工作正常。PHP包含:長路徑問題

例如,以下將失敗:

../../contents/2010-St-Louis-Rams-Tickets-Season-Package-Includes-Tickets-For-All-Regular-Season-Home-Games/inc/title.inc 

有沒有人有任何想法,問題可能是什麼?

+1

路徑錯誤? – alex

+0

請發佈您的操作系統配置和確切的PHP錯誤消息。它可能是一個真正的文件沒有找到錯誤或者只是一個權限問題。您的操作系統不太可能限制文件名的長度。 –

+0

代碼是正確的,因爲相同的代碼正在使用appachi在Linux服務器上工作,但我們已將網站從Linux服務器遷移到帶有IIS 7的Windows 2008服務器。它不顯示任何錯誤或警告,只是跳過它。 – Imran2220

回答

1

請檢查您的路徑(包括驅動器名稱等)是否超過260個字符。因爲這是Windows的最大目錄長度。 Click here to see the reference

該引用還指出可以通過將路徑名前加「\?\」來創建超長路徑名。這應該將最大路徑長度擴展到32767個字符。但我不知道這是否可以在PHP中使用。

+2

我在這個答案上看到+1,所以我想知道是否有人通過在PHP中使用\\?\語法來成功?我個人無法使用它,但也許我錯過了一些東西? –

+0

是的,前置'\\?\'不起作用。 [This](http://www.serverphorums.com/read.php?7,627200)看起來像一個解釋,雖然很長。 – XedinUnknown

+0

你是對的。由於PHP中的錯誤,長路徑名稱不起作用。這已經[用PHP 7.1修復](https://github.com/php/php-src/blob/php-7.1.0RC4/NEWS#L763)。 – Carsten

0

我有一個symfony的1.x的項目相同的問題時,編寫測試,看起來是這樣的:

require_once __DIR__ . '/../../../../bootstrap/unit.php'; 
require_once __DIR__ . '/../../../../../../../MY/LONG/PATH.php' 

這裏的事情是,那些/../../ ..採取了很多的字符空間。在我的情況下,如果這些沒有使用它會起作用。

在symfony中,你通過調用sfConfig ::得到(「SF_ROOT_DIR」)項目,你可以得到的根,因此我可以通過以下方式更改代碼:

require_once __DIR__ . '/../../../../bootstrap/unit.php'; 
require_once sfConfig::get('sf_root_dir') . '/MY/LONG/PATH.php' 

這工作(在我案件)完美。

雖然在這裏我使用symfony框架提供的根目錄,但在您自己的項目中,它只是在某處定義項目的根目錄並保持可訪問性。