Tôi biết, rằng theo định nghĩa của nó, một ngoại lệ chết người được cho là sẽ giết thực thi, và không nên bị đàn áp, nhưng đây là vấn đề.Bắt ngoại lệ chết người và tiếp tục
Tôi đang chạy tập lệnh để phân tích, phân tích cú pháp và lưu trữ trong DB khoảng 10.000 trang. Quá trình này mất một vài giờ và trong một số ít trường hợp (1 trong 1000) một trang không phân tích cú pháp và ném một ngoại lệ gây tử vong.
Hiện nay, tôi đang làm điều này:
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);
}
Tôi có thể làm điều gì đó như
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;
}
}
Đoạn mã trên không làm việc cho fatal exceptions
.
Có thể thực hiện một việc như sau: Nếu tôi đã chuyển vòng lặp chính vào một phương thức, sau đó gọi phương thức từ register_shutdown_function
?
Như thế này:
function do($start)
{
for($i=$start;$i<$count;$i++)
{
//do stuff here
}
}
register_shutdown_function('shutdown');
function shutdown()
{
do();
}
Đây là thông điệp mà là đầu ra khi thực hiện ngừng:
Fatal error: Call to a member function find() on a non-object in ...
Tôi hy vọng thông điệp trên này khi một trang không được phân tích-thể bằng phương pháp tôi đang sử dụng. Tôi tốt với chỉ bỏ qua trang đó và chuyển sang vòng lặp tiếp theo của vòng lặp.
'Ngoại lệ chết người' là gì? Làm thế nào là 'bắt của bạn (ngoại lệ $ e)' không hoạt động? – cspray
Thật vậy ..... Có ai đó ném thứ gì đó không mở rộng 'Ngoại lệ' không? – Wrikken
... trong trường hợp nào, bạn không thể chỉ bắt '} ($ e) {'? – DaveRandom