2011-03-11 56 views
1

我正在將站點從一臺服務器遷移到另一臺服務器。在舊服務器上,getcwd()始終返回腳本運行的目錄。在新服務器上,在我的一個腳本中,一旦進入函數內部,getcwd()將返回根。在函數之外,它返回正確的目錄。這可能是由於使用了不同的服務器API? (舊服務器使用CGI/FastCGI,新的使用Apache 2.0處理程序)PHP:getcwd()根據服務器返回不同的結果

編輯:我實際上不依賴getcwd()代碼中,但is_readable()。我只是使用getcwd()來檢查,因爲我被告知is_readable()(這是不工作的)依賴於cwd

回答

1

是的,這可能是由於一些事情,包括Apache和PHP安裝,API使用,PHP版本和操作系統。從服務器到服務器至少有一件事情是不一致的。也有可能(如果不太可能的話)那些正在發生的函數中發生的事情是什麼導致了行爲的改變(儘管這並不能解釋爲什麼舊的服務器沒有發生這種情況)。

你可能不應該依靠getcwd()輸出,如果你要在多臺服務器部署(或者如果切換服務器)。

新服務器的行爲是奇怪,但我不明白爲什麼它會是一個問題。

3

如果您想要獲取當前腳本所在的目錄,通常最好使用dirname(realpath(__FILE__))而不是getcwd()

__FILE__是幾個「魔術常量」之一。

0

啊,你沒有提到的FastCGI從交換機中your previous question以mod_php的!這可能是錯誤的--Apache從根目錄開始,而FastCGI進行目錄更改。

你有沒有考慮只是切換回FastCGI的? PHP 5.3.3 +的FPM SAPI應該是相當不錯的,如果你切換到mod_php是因爲FastCGI給你帶來麻煩。 (編輯:啊,我看你問如何在不同的問題,不幸的是我從來沒有設立FPM,只從中獲益......。)

否則以前的答案仍然適用:你的代碼是更好關閉使用__DIR__dirname(__FILE__)比依靠cwd。現在你的代碼是通過這樣做。您可能花費了更多的努力來尋找解決方法,而不是現在就修復它。 :)

相關問題