gpt4 book ai didi

php - 捕获致命异常并继续

转载 作者:可可西里 更新时间:2023-11-01 12:44:38 26 4
gpt4 key购买 nike

我知道,根据其定义,致命异常应该终止执行,不应被抑制,但这就是问题所在。

我正在运行一个脚本,该脚本可以在数据库中抓取、解析和存储大约 10,000 页。这需要几个小时,在极少数情况下(千分之一)页面无法解析并引发致命异常。

目前,我正在这样做:

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,$termMap,$subjectMap);
$class = $parser->parseClassInfo($classDOM);
$dbmanager->storeClassInfo($class);
unset($classDOM,$class,$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 ...

当页面无法通过我使用的方法解析时,我希望看到上面的消息。我可以跳过该页面并继续循环的下一次迭代。

最佳答案

fatal error 是致命的并终止执行。如果发生 fatal error ,则无法解决此问题。但是,您的错误:

Fatal error: Call to a member function find() on a non-object in ...

是完全可以预防的。只需添加一个检查以确保您拥有正确对象的实例,如果没有,则处理错误:

if ($foo instanceof SomeObject) {
$foo->find(...);
} else {
// something went wrong
}

关于php - 捕获致命异常并继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8839173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com