2013-07-30 86 views
1

我有一个脚本可以删除一些旧的HTML。它每天约1000页,并且每隔一段时间就扼流圈出于某种原因,并抛出了以下错误:无法从QueryPath中捕获“可捕获的致命错误”

PHP Catchable fatal error: Argument 1 passed to DOMXPath::__construct() must be an instance of DOMDocument, null given, called in /var/scraper/autotrader/inc/QueryPath/QueryPath/CSS/DOMTraverser.php on line 417 and defined in /var/scraper/autotrader/inc/QueryPath/QueryPath/CSS/DOMTraverser.php on line 467 

起初我还以为是在htmlqp($ HTML)被称为产生差错,但我已经在一个try {}语句包裹它,它并没有捕捉到任何:

UPDATE:

我用@时看到脚本将没有错误终止发现问题的代码行。这是该行:

try { 
     $items = $html->find('.searchResultHeader')->find('.vehTitle'); //this one 
    } catch (Exception $e) { 
     var_dump(get_class($e)); 
     echo 'big dump'.$e->getTraceAsString(); 

    } 

当炸弹出来,它甚至不呼应“大翻斗”,所以它确实似乎没有抓住它。

我在想,如果这可能是QueryPath的错误处理而不是我自己的错误?

+0

有没有人可以提供一些见解,为什么这不是捕捉? – James

+0

我不知道它是否仍然需要某人,谁需要解决方案请求chekc http://stackoverflow.com/questions/2468487/how-can-i-catch-a-catchable-fatal-error-on- PHP型暗示 –

回答

0

此:

$html->find('.searchResultHeader')->find('.vehTitle'); 

是一样的:

$html->find('.searchResultHeader .vehTitle'); 

但是,如果没有调用空值的)风险>找到(;

如果你真的想这样做,在2个步骤,使用if,而不是一个try

if($el = $html->find('.searchResultHeader')) $items = $el->find('.vehTitle'); 

或许三元:

$items = ($el = $html->find('.searchResultHeader')) ? $el->find('.vehTitle') : null; 
相关问题