2015-01-04 6 views
0

그래서 XML과 extrac $ xml-> loc을 더 많은 URL에서 확인하기 위해 다중 컬을 포함하는 스크립트를 작성하지만, 다른 URL을 찾지 못하면 스크립트 충돌 (중지)이 발생합니다. XML 파일simpleXML이 null인지 확인하는 방법

...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 URL을 넣으면하지만 100 링크를 걸어 그 중 하나는 XML 스크립트가 중지 파일이 아닌 경우.

ERROR : 파일이 홈페이지에 나를 리디렉션 존재하지 않는 경우 때문에 내 스크립트가 HTML 파일에서 정보를 추출하려고처럼

은 (내 생각)
[[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] ~]# 

같은데 ... 어떤 옵션이 할 SimpleHTMLElement가 XML 파일의 전체 소스 코드 인 $ $ 변수를 구문 분석 할 수없는 경우 계속해야합니다.

답변

2

try catch 블록을 사용하여 예외를 처리 할 수 ​​있습니다.

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

내 스크립트를 실행 한 후 30 초가 지나면 작동하지 않는 것으로 보입니다. OS에서 죽게됩니다 ... 설명은 많은 양의 정보를 저장할 수 없기 때문입니다. –

+0

@ john-smith 기본 최대 실행 시간이 30 초라고 생각합니다. php.ini 파일에이 파일을 추가해야 할 수도 있습니다. 메모리 제한을 늘려야 할 수도 있습니다. –

+0

아니요 :) 최대 실행 시간이나 메모리 한도가 아니기 때문에 조금 문제를 연구해야하지만 실제로 거기에서 벗어난 것은 아닙니다 ... –

관련 문제