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