跳过当前循环,如果错误

时间:2012-01-08 00:57:51

标签: php

我有

foreach($users as $user){ 
            $doc = new DOMDocument();
            $doc->loadXml(file_get_contents($user["syncUrl"]));
}

如果$ user [“syncUrl”]上的url中的内容,那么loadXml()返回错误(如果它无法读取),我希望它继续;并且不要在循环中读取其余部分,直到下一个循环(下一个$ user)。

现在它正在崩溃,并输出由于格式错误而无法读取的内容。但我希望它跳过这个并继续其余的。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

呵呵,你在问题中有它:continue;是跳过循环的其余部分并开始下一次迭代的命令。对$ doc-> loadXML进行错误检查,如果未成功加载,则continue;

所以:

foreach($users as $user)
{ 
     $doc = new DOMDocument();
     $loaded = $doc->loadXml(file_get_contents($user["syncUrl"])); //Should return false on failure, true on success
     if($loaded === false)
     {
         continue;
     }
     //Do other stuff here if successfully loaded.
}

使用DOMDocument::validate()验证格式(来自DTD)和continue如果无效,也可能是明智之举。您还可以使用DOMDocument::schemaValidateSource()提供源架构,并使用DOMDocument::schemaValidate()验证该架构的格式。您也可以这样做以在加载时验证它:

$doc = new DOMDocument();
$doc->validateOnParse = true;
$doc->loadXML('etc');

如果文件内容实际存在,那么加载函数返回false可能是必要的。

答案 1 :(得分:0)

尝试在@来电前加$doc->loadXml,看看是否有效。

答案 2 :(得分:0)

使用错误抑制运算符@

foreach($users as $user) { 
    $doc = new DOMDocument();
    @$doc->loadXml(file_get_contents($user["syncUrl"]));
}

答案 3 :(得分:0)

使用try和catch块?

foreach($users as $user){ 
    try{
        $doc = new DOMDocument();
        $doc->loadXml(file_get_contents($user["syncUrl"]));
    }
    catch(Exception $e){
        continue;
    }
    //Rest of the code..
}