2012-01-29 34 views
0

我有一個PHP腳本從XML文件讀取生成一個表。它所做的第一件事是檢查以確保文件存在。什麼會導致Web服務器找不到XML文件?

$path = getcwd(); 
if(file_exists($path.'\inc\php\kbs.xml')){ 
    $kbs = simplexml_load_file($path.'\inc\php\kbs.xml'); 
} else { 
    echo "Error: No KB file found"; 
} 

由於某種原因,間歇性地,它沒有找到該文件。我已經嘗試刪除file_exists全部檢查(因爲我知道文件確實存在),但它仍然不會有時加載文件。我可以刷新頁面,並在7次中有7次不加載,但有時會加載。

我在開發過程中從未遇到過這個問題,但是一旦它發生了生產(現在可能被200個用戶使用),它就開始發生了。

我該如何解決這個問題? (PHP 5.2.14運行在IIS)

編輯:錯誤日誌給我以下消息失敗時:

Notice: Undefined variable: kbs in <the path> on line 16 
Notice: Trying to get property of non-object in <the path> on line 16 
Warning: Invalid argument supplied for foreach() in <the path> on line 16 

線16是第一次的可變$kbs被訪問。如果找不到該文件,則顯然$kbs未設置。

+0

這樣的問題總是很棘手,令人難以置信,有時候工作,有時候不行。請按照@xdazz建議的方式嘗試使用絕對路徑 – Abhay 2012-01-29 06:50:05

+0

我幾乎希望它完全不起作用,而不是間歇性地執行:P – sicks 2012-01-29 06:57:58

+0

當然,錯誤意味着$ kbs未設置,但您的腳本是否也輸出「錯誤:找不到KB文件」?如果是,那麼肯定file_exists()返回false。如果不是,則表示XML文件存在。並且現在不要將$ path設置爲getcwd();而是嘗試給你的XML文件提供完整的「絕對路徑」。 – Abhay 2012-01-29 07:26:57

回答

1

請使用絕對路徑,相對路徑使事情變得一團糟。

+0

更改爲絕對路徑,同樣的事情。在10次刷新中工作了兩次。 – sicks 2012-01-29 06:24:07

+0

@sicks將您的error_log級別設置爲'E_ALL',並檢查日誌。 – xdazz 2012-01-29 06:27:01

+0

用錯誤日誌更新了問題 – sicks 2012-01-29 06:57:01

0

相對於PHP的位置?權限是否允許Web服務器查看它?

+0

我會承認權限很好,因爲它的工作原理有些時候。您在那裏看到的位置與嘗試訪問它的網頁相關。如果直接進入路徑,打開文件也沒有任何問題。 – sicks 2012-01-29 05:15:58

相關問題