2012-05-06 43 views
1

我環顧四周,類似的問題,但沒有發現相同的,所以這裏有雲:PHP並不一定是XML文件

我有一個Linux/Apache服務器上該網頁時,PHP腳本打開後,每一個XML文件執行,有趣的是,有時它可以讀取文件,在一些罕見的情況下它不能。當它不能讀取它說,該文件不存在,並修復它,我只需刷新頁面。

可以在子目錄(例如/srv/www/page/subdir/file.xml)中找到XML文件,只能手動更改XML文件並設置正確的權限(PHP可以讀取和寫入)。

我使用SimpleXML和我得到的錯誤是:I/O warning : failed to load external entity

因此,一些奇怪的服務器是怎麼回事,我只是無法弄清楚..

編輯:添加一些代碼

if (!file_exists($file)) 
{   
    error_log("File " . $file . " does not exist!"); 
    //return FALSE; 
} 

if ($obj = simplexml_load_file($file)) 
{ 
    // do stuff 
    return TRUE; 
} 
else 
{ 
    error_log("Could not parse XML: " . $file); 
    return FALSE; 
} 

解決:在代碼中的錯誤,不SERV呃

+2

你有什麼問題? – Baba

+0

我在完成之前意外地提交了我的問題。 – DFQ

+0

您打算寫作還是閱讀? – Sietse

回答

1

有沒有明顯的解釋爲什麼文件偶爾不可用。可能是平臺/操作系統問題,很難說。

但是,您可以申請對這個問題的創可貼,它可以解除你,如果等待了3秒,使文件「再次出現」:

$count = 0; 
$found = FALSE; 
while($count < 3 && !$found) { 
    if (!file_exists($file)) { 
     $count++; 
     sleep(1); // sleep 1 second to see if the file appears on the next try 
    } else 
     $found=TRUE; 
} 

if(!$found) 
    die("file not found after 3 attempts"); 
+0

感謝您的回答,不幸的是,雖然它沒有工作..如果沒有找到文件(嘗試每秒)等待5秒鐘,並且問題仍然存在。 – DFQ

+0

這是值得一試。 ;)有可能在你的代碼的某些調用中,$ file變量設置不正確? (!file_exists(..))if語句中的var_dump($ file)來查看它是否被破壞或設置不正確。 – Phil

+0

經過一番研究後,我發現路徑在進入/離開子目錄時有時並不準確更新。路徑基於沒有正確同步的會話數據(邏輯/代碼錯誤)。 – DFQ

相關問題