如何从外部源控制加载XML文件

时间:2012-03-08 09:51:37

标签: php xml

我正处于一个新项目中,我需要从其他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。

1 个答案:

答案 0 :(得分:1)

  1. 使用stream_get_contents 打开远程文件,它将返回一个流资源,这意味着无需在内存中预先加载即可读取

  2. 使用XMLReader 解析流,它可以解析流而无需将其完全预加载到内存中

  3. 最好是在本地数据库中同步远程数据,因为它会更快并且还能抵抗远程故障...当然,在许多情况下这是不可能的(谁将要同步last.fm XML api?我试过它不起作用:))