PHP CURL - 如何判断所请求的整个文件是否未完全下载

时间:2010-12-05 08:05:26

标签: php curl simplexml proxies

我正在使用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文档,我不得不为每种类型编写检查。

2 个答案:

答案 0 :(得分:1)

我遇到了与代理相同的问题,但我没有使用cURL的错误处理程序解决问题。如果您有权访问这两个脚本(请求的那个脚本和提供XML的脚本),那么请求的脚本会在XML的末尾提供它所期望的唯一代码:

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

在输出结尾附加评论:

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

答案 1 :(得分: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. */ }