2012-03-08 74 views
0

我在一個新項目中需要從其他Web服務加載XML文件並處理其內容。如何控制從外部源加載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服務運行UND響應。 但是一旦它落後,simplexml_load_file()函數就會使用整個腳本所有的時間,試圖從源代碼加載,最後腳本返回一個美麗的白色屏幕。

所以我想知道是否有可能控制時間量,腳本必須加載外部XML,如果不成功,則會打印一個錯誤。

或者是否還有更好的方法來安全地加載PHP的外部XML文件? 我在這個項目上使用symfony 1.4。

回答

1
  1. 打開與stream_get_contents遠程文件時,它將返回一個流的資源,這意味着它可以被讀取,而無需在存儲器中被預加載

  2. XMLReader解析流,它能夠解析一個流,而無需預先將其全部預加載到內存中

  3. 最好的辦法是同步本地數據庫中的遠程數據,因爲它會更快,並且能抵抗遠程故障......當然,這在許多情況下是不可能的(誰將同步last.fm XML api?我試過它不工作:))

+0

我用第一個選項與stream_get_contents()的組合。這絕對是一個改進。萬分感謝! – 2012-03-08 11:17:59

+0

太棒了!更新答案,感謝您的反饋。另外:使用xmlreader,這絕對是php5的一個晦澀和真棒功能的榮譽。 – jpic 2012-03-08 11:18:43