我知道,根据它的定义,一个致命的异常应该杀死执行,不应该被压制,但这是问题所在.
我正在运行一个脚本,在数据库中擦除,解析和存储大约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;
- }
- }
上面的代码不适用于致命异常.
是否有可能做这样的事情:
如果我将主循环移动到方法中,然后从register_shutdown_function调用该方法?
像这样:
- 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 ...