2011-03-10 57 views
14

我正在將我的網站從一臺服務器轉移到另一臺服務器。我有一些使用is_readable函數的php腳本,它使用當前的工作目錄。PHP:如何設置當前工作目錄與執行腳本的目錄相同

在舊服務器上,當我調用getcwd()時,它會輸出腳本正在執行的文件夾。在新服務器上輸出根目錄'/'。

我想知道如何配置PHP使用當前文件夾而不是'/'。 我不想更改任何已在舊服務器上工作的PHP代碼。我可以配置新服務器,但不知道要更改哪些設置。我使用apache2,如果有幫助。

編輯:好像我的工作目錄不像我想象的那樣。當我創建了一個testFile.php和迴音GETCWD()它顯示了目錄中的PHP文件中,但在我的問題的文件,在同一目錄下,GETCWD()顯示爲「/」

+0

的兩個不同的服務器運行不同版本的PHP,是嗎? – klang 2011-03-10 00:28:40

+1

是: 舊服務器使用5.2。 新服務器使用5.3。 – MF86 2011-03-10 00:52:34

+0

[在PHP中,使用CLI時確保當前工作目錄與腳本相同的最佳方法](http://stackoverflow.com/questions/192092/in-php-best-way-to-ensure-current -working-directory-is-same-as-script-when-us) – 2016-09-03 18:22:42

回答

19

chdir(__DIR__);

chdir(dirname(__FILE__));

(見chdirmagic constants)。

但是這應該是默認情況下。

+1

謝謝,但我可以把它放在php.ini或者某個配置文件中嗎?我不想編輯我現有的PHP代碼。 – MF86 2011-03-10 00:20:56

+0

@ MF86你不能把它放在你的php.ini中。但是你可以把它放在寫成普通PHP代碼的配置文件中。 (EG包含代碼的配置文件,例如'<?php $ config ['settingName'] = __DIR__。'someValue';') – 2017-12-21 10:29:06

2

如果> = PHP 5.3,您可以使用dirname(__FILE__)__DIR__腳本所在的當前目錄。

+0

+1不會提示'chdir',它可能會產生不需要的副作用。最好將腳本調整爲不關心當前的工作目錄是什麼,而不是繼續可能的奇怪行爲。 – Charles 2011-03-10 00:20:07

+0

我希望能夠在不更改現有腳本的情況下執行此操作。在舊服務器上,getcwd()返回當前執行腳本的目錄。 – MF86 2011-03-10 00:25:04

+0

如果您需要使用代碼在無法控制配置的機器上工作,您將*需要*將代碼更改爲不關心外部配置。 '__DIR__'或'dirname(__ FILE __)'可以保證文件所在的目錄無需關心cwd。 – Charles 2011-03-10 00:29:16

3

這種情況是正常CLI mode:

它不更改工作目錄以腳本的。 (-C和--no-CHDIR開關保持兼容性)

一個快速的解決方法是

chdir(dirname(__FILE__)); 
+0

謝謝。你知道我可以如何切換CLI模式嗎? – MF86 2011-03-10 01:01:14

+0

@ MF86你爲什麼在第一時間呢?你的腳本在哪裏運行? – 2011-03-10 09:21:41

+0

我不確定我是誰。我的腳本運行在apache上,在我的www文件夾中。 – MF86 2011-03-10 16:50:26

相關問題