我正处于一个新项目中,我需要从其他Web服务加载XML文件并处理其内容。
外部服务也处于发展阶段,因此与之合作有点滞后。
现在,我正在使用这种方式:
if (fopen(Constants::XML_AUTH . $this->xmlString, "r") == true) {
$this->xmlDom = simplexml_load_file(
Constants::XML_AUTH . $this->xmlString,
'SimpleXMLElement');
if (!$this->xmlDom) {
$this->setStatus(Constants::XML_NOTLOADED);
}
else {
$this->setStatus($this->xmlDom->status);
$this->setType();
}
}
只要外部Web服务正在运行且没有响应,这样就可以正常工作。 但是一旦它滞后,simplexml_load_file()函数就会使用整个脚本所有的时间,尝试从源加载,最后脚本返回一个漂亮的白色屏幕。
所以我想知道是否有可能控制时间,脚本必须加载外部XML,如果不成功,则打印错误。
或者是否有更好的方法可以安全地使用PHP加载外部XML文件? 我在这个项目上使用symfony 1.4。
答案 0 :(得分:1)
使用stream_get_contents 打开远程文件,它将返回一个流资源,这意味着无需在内存中预先加载即可读取
使用XMLReader 解析流,它可以解析流而无需将其完全预加载到内存中
最好是在本地数据库中同步远程数据,因为它会更快并且还能抵抗远程故障...当然,在许多情况下这是不可能的(谁将要同步last.fm XML api?我试过它不起作用:))