2009-08-19 106 views
2

我知道「一定是被改變了的東西」,但是我的代碼似乎無緣無故地晚上破了。php fopen破碎的相對路徑 - 神祕

我的服務器的目錄結構是這樣的:

/
/腳本
/審計
/other_things

我有一個腳本(假設它稱爲「/腳本/MyScript.php「)在」scripts「文件夾中,該文件夾使用curl從網頁收集數據,並保存它在」audit「文件夾中讀取的網頁的日期副本。

要寫入審計文件夾中,我使用

$ FH =的fopen( 「./審計/ 2008-09-09-183000.backup.log」, 「W」);

然而

即停止工作,拋出

[function.fopen]:未能打開流:在/home/web/website.co.uk/audit/2008-沒有這樣的文件或目錄09-09-183000.backup.log線353

但是我有固定這通過改變路徑

「../audit/2008等。」從「./audit/2008」(這是兩個完整的停止/期間,而不是一個)

邏輯指出,必須在服務器配置中發生了某些變化,但是什麼?這是我管理的專用服務器。我怎樣才能避免這樣的事情再次發生?

我甚至已經通過SVN的MyScript.php和所有以前的版本已經使用單。在路徑中。

回答

7

使用dirname(__FILE__)獲取當前文件的文件系統路徑。然後使用從那裏的相對路徑來查找您的audit目錄。

例如,在scripts/MyScript.php之內,dirname(__FILE__)將返回/home/web/website.co.uk/scripts。你可以可靠地附加/../audit

(注意,這甚至還可以在include d或require d文件,在這種情況下,它會返回,其中包括文件所在的目錄)。

0

您的CWD(當前工作目錄)已將其更改爲文檔根目錄,現在它是文檔根目錄/腳本。

這可能是由於用於訪問腳本的路徑而發生的,例如,如果您之前做過http://website.co.uk/MyScript.php之前的某個url重寫或某些操作,並且您現在正在訪問http://website.co.uk/scripts/MyScript.php

我似乎還記得還有其他可能的元兇,但我現在不記得他們了。你有沒有修改一些重寫規則或URL? (即開始使用PATH_INFO?)