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

Php 如何控制从外部源加载XML文件,php,xml,Php,Xml,我在一个新项目中,需要从其他web服务加载XML文件并处理它们的内容 外部服务也在发展中,因此与之合作有点滞后 现在,我用这种方式: if (fopen(Constants::XML_AUTH . $this->xmlString, "r") == true) { $this->xmlDom = simplexml_load_file( Constants::XML_AUTH . $this->xmlString,

我在一个新项目中,需要从其他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文件? 我在这个项目上使用symfony1.4

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

  • 使用解析流,它能够解析流,而无需将其完全预加载到内存中

  • 最好是在本地数据库中同步远程数据,因为它速度更快,而且还能抵抗远程故障。。。当然,这在很多情况下是不可能的(谁来同步last.fm XML api?我试过了,它不起作用:)


  • 我将第一个选项与stream_get_contents()结合使用。这绝对是一个进步。非常感谢!明亮的更新答案,感谢您的反馈。另外:使用xmlreader的荣誉,这无疑是php5的一个晦涩难懂且令人敬畏的特性。