簡體   English   中英

PHP CURL - 如何判斷所請求的整個文件是否未完全下載

[英]PHP CURL - how to tell if the entire file requested was not fully downloaded

我正在使用CURL和代理來獲取一些xml文件,當我嘗試加載/使用xml(simplexml_load_string)時,偶爾只有一部分XML文檔通過並失敗。

我覺得像..

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

將通過CURL errno捕獲此類錯誤..

CURLE_PARTIAL_FILE(18)

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

但是,這不起作用,我認為可能是由於使用了代理。 我還能檢查什么嗎? 我現在唯一的想法是對XML文檔的最后一部分進行preg_match,但這似乎不太理想,因為我要獲取多種類型的XML文檔,並且必須為每種類型編寫檢查。

我在代理服務器上遇到了同樣的問題,但我未能使用cURL的錯誤處理程序解決問題。 如果您可以訪問這兩個腳本(一個請求並提供XML的腳本),則請求者提供一個唯一的代碼,它期望在XML末尾:

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

並在輸出的末尾添加注釋:

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

好吧,出現錯誤已經告訴您,您獲得的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. */ }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM