所以,我构建了一个包含多个curl的脚本来验证来自更多URL的XML和extrac $ xml-> loc但是当我发现其他不是xml文件的其他内容时我的脚本崩溃(停止)
...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文件,脚本会停止。
ERROR:
[root@test ~]# 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
[root@test ~]#
似乎我的脚本尝试从html文件中提取信息,因为如果该文件不存在,它会将我重定向到主页(我猜)... 如果SimpleHTMLElement无法解析我的$ data变量(XML文件中的整个源代码),我还需要做什么选择?
答案 0 :(得分:2)
您可以使用try catch块来处理异常。
try {
$xml = new SimpleXMLElement($data);
//XML is valid
...
} catch(Exception $e) {
//XML is invalid
}