2015-01-04 35 views
0

因此,我構建了一個腳本,其中包含多個curl來驗證來自更多url的XML和extrac $ xml-> loc,但是當他發現其他任何不是xml文件如何檢查simpleXML是否爲空

...multi curl code... 
    if($httpcode>=200 && $httpcode<=300) { 
     $xml = new SimpleXMLElement($data); 
     if($xml !== NULL) { 
      foreach ($xml->url as $url_list) { 
      $url = $url_list->loc; 
      $newurls[] = $url; 
      } 
     } 
    } 

如果我把5個有效XML網址它的工作原理,但如果我把100的鏈接,其中一人是不是一個XML文件中的腳本將停止。

錯誤:

[[email protected] ~]# php a z2 
PHP Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /root/a:160 
Stack trace: 
#0 /root/a(160): SimpleXMLElement->__construct('\r\n<!DOCTYPE htm...') 
#1 /root/a(65): mycurl_done('http://southpas...', '\r\n<!DOCTYPE htm...', Resource id #36) 
#2 /root/a(175): ThreadsLoop() 
#3 {main} 
    thrown in /root/a on line 160 
[[email protected] ~]# 

好像我的腳本嘗試從一個HTML文件中提取信息,因爲如果該文件不存在,它將我重定向到主頁(我猜)... 哪些選項如果SimpleHTMLElement無法解析我的$ data變量(這是XML文件中的完整源代碼),那麼我必須繼續下去?

回答

2

您可以使用try catch塊來處理異常。

try { 
    $xml = new SimpleXMLElement($data); 
    //XML is valid 
    ... 
} catch(Exception $e) { 
    //XML is invalid 
} 
+0

似乎它的作品,但運行我的腳本30秒後不會從操作系統中被殺死......唯一的解釋是因爲數組不能容納那麼多的信息。 –

+0

@ john-smith我相信默認的最大執行時間是30秒。你可能需要在你的php.ini文件中找到它。您可能還需要增加內存限制。 –

+0

不是不是從最大執行時間或內存限制,我不得不研究一點點的問題,但我真的很確定不是從那裏... –