2013-08-03 18 views
0

我想要得到一個include d PHP腳本寫入文件,並且路徑沒有按我的意願解析。以下是該場景:PHP:指定完整路徑時使用Apache Document Root的include'd腳本的fopen路徑?

正在運行的腳本(調用腳本)可通過Web訪問。爲了節省我打字,說http://example.com/script1.php和example.com絕對路徑的Apache的文檔根目錄是/home/jweinberger/com.example/

我在/home/jweinberger/scripts/script2.php.

script1.php位於(絕對路徑)另一個腳本包含一個include('/home/jweinberger/script2.php),它工作得很好。

script2.php嘗試到fopen('/home/jweinberger/logs/script1.log')失敗。該錯誤消息說,它正試圖打開:

/home/jweinberger/com.example/logs/script1.log//home/jweinberger/logs/script1.log

顯然,正在預先調用腳本的Apache文檔根目錄,這是我不需要的。

我已經完全指定了所有路徑(根本沒有相對路徑)。 safe_mode已關閉,doc_root爲空,並且未在php.ini中設置cgi.force_redirect。這是PHP 5.2.17(由我的網站主機提供 - 我無法控制升級)

而且,如果有問題,script2.php在CLI腳本調用時成功打開正確的文件,而不是在CGI調用時。

任何人都可以提供任何意見或方向我能做些什麼來讓script2.php成功打開正確的文件?

我非常感謝。

回答

0

如果路徑/啓動時,它會指向根文件系統是罰款CLI但CGI會明白這種方式:

/home/jweinberger/com.example/logs/script1.log //home/jweinberger/logs/script1.log

您應該從$_SERVER陣列使用索引'DOCUMENT_ROOT'

fopen($_SERVER['DOCUMENT_ROOT'].'/home/jweinberger/logs/script1.log') 
0

梅達給了我線索,讓我找到答案。

我的錯誤是我構造文件名的方式。我預先將「/ home/jweinberger/logs」添加到當前腳本名稱中,由於當前腳本名稱是完整路徑,因此這是錯誤的。

當我使用basename(當前腳本名稱)代替時,它工作正常。

簡單的疏忽。希望它能幫助這裏的某個人