php – 抓住致命异常并继续
发布时间:2020-12-13 18:23:41 所属栏目:PHP教程 来源:网络整理
导读:我知道,根据它的定义,一个致命的异常应该杀死执行,不应该被压制,但这是问题所在. 我正在运行一个脚本,在数据库中擦除,解析和存储大约10,000页.这需要几个小时,在极少数情况下(1000个中有1个)页面无法解析并抛出致命异常. 目前,我这样做: for ($i=0;$i$count
我知道,根据它的定义,一个致命的异常应该杀死执行,不应该被压制,但这是问题所在.
我正在运行一个脚本,在数据库中擦除,解析和存储大约10,000页.这需要几个小时,在极少数情况下(1000个中有1个)页面无法解析并抛出致命异常. 目前,我这样做: for ($i=0;$i<$count;$i++) { $classObject = $classObjects[$i]; echo $i . " : " . memory_get_usage(true) . "n"; $classDOM = $scraper->scrapeClassInfo($classObject,$termMap,$subjectMap); $class = $parser->parseClassInfo($classDOM); $dbmanager->storeClassInfo($class); unset($classDOM,$class,$classObject); } 我能做点什么吗 for ($i=0;$i<$count;$i++) { $classObject = $classObjects[$i]; echo $i . " : " . memory_get_usage(true) . "n"; try { $classDOM = $scraper->scrapeClassInfo($classObject,$subjectMap); $class = $parser->parseClassInfo($classDOM); $dbmanager->storeClassInfo($class); unset($classDOM,$classObject); } catch (Exception $e) { //log the error here continue; } } 上面的代码不适用于致命异常. 是否有可能做这样的事情: 像这样: function do($start) { for($i=$start;$i<$count;$i++) { //do stuff here } } register_shutdown_function('shutdown'); function shutdown() { do(); } 这是执行停止时输出的消息: Fatal error: Call to a member function find() on a non-object in ... 当我正在使用的方法无法解析页面时,我希望上面的消息.我很好,只是跳过该页面并继续循环的下一次迭代.
致命错误是致命的并终止执行.如果发生致命错误,则无法解决此问题.但是,你的错误:
是完全可以预防的.只需添加一个检查以确保您拥有正确对象的实例,如果没有,则处理错误: if ($foo instanceof SomeObject) { $foo->find(...); } else { // something went wrong } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |