2010-12-05 50 views
0

我正在使用CURL和代理來獲取某些xml文件,偶爾只有部分XML文檔會通過,並且在嘗試加載/使用時失敗xml(simplexml_load_string)。PHP CURL - 如何判斷整個文件請求是否未完全下載

我覺得像..

if(curl_errno($ch)) 
    { 
     $error = curl_error($ch); 
     // handle error 
    } 

會趕上通過捲曲的errno這個八九不離十錯誤..

CURLE_PARTIAL_FILE(18)

文件傳輸更短或大於 預期。當 服務器首次報告預期的傳輸大小 ,然後傳遞與先前的 給定大小不匹配的數據 時,會發生這種情況。

但是,這不起作用,我認爲這可能是由於使用代理。還有什麼我可以檢查?我現在唯一的想法是爲XML文檔的最後一位做一個preg_match,但這看起來不太理想,因爲我得到多種類型的XML文檔,並且我必須爲每種類型編寫檢查。

+0

由於這無關你的問題的說明,那麼您可以縮短這樣的代碼`如果($ error = curl_error($ ch)){...}`。 – 2010-12-05 08:14:05

+0

我通常會做那種事情,但是那段代碼直接從php文檔中拷貝curl_errno,所以你必須在你的OCD上工作:] – Steffan 2010-12-05 08:18:04

回答

1

我遇到了與代理服務器相同的問題,我沒有使用cURL的錯誤處理程序解決問題。如果你有機會獲得這兩個腳本(一個請求和一個傳遞XML)已在一個請求提供其期望的XML結束的唯一代碼:

// Request 
http://localhost/getxml.php?id=4&uniq=1337 

並追加在結束評論輸出:

<?xml encoding="..." ..?> 
... 
<!--1337--> 
+0

10我不能訪問交付腳本的人不幸的。 – Steffan 2010-12-05 08:22:55

1

好,具有誤差已經告訴你,你得到了XML文件無效。你需要做的是捕捉錯誤並處理它。

一個快速的解決方法是這樣的:

$xml = @simplexml_load_string($xmlString); 
if($xml === false){ /* The XML was not valid. */ } 

一個日誌修復是這個:

libxml_use_internal_errors(true); 
libxml_clear_errors(); 
$xml = simplexml_load_string($xmlString); 
if(($err = libxml_get_last_error()) !== false){ /* We got ourselves an XML error. */ } 
相關問題