如何處理在foreach循環中發生的異常?如果內存超出循環,我可以在for循環中拋出異常嗎?
如果for循環無法正常工作,我想拋出異常。
由於數據量巨大,因爲超出了PHP的內存限制,所以foreach退出。
try
{
foreach()
}catch (exception $e)
{
echo $e;
}
這是行不通的。我如何拋出異常?
如何處理在foreach循環中發生的異常?如果內存超出循環,我可以在for循環中拋出異常嗎?
如果for循環無法正常工作,我想拋出異常。
由於數據量巨大,因爲超出了PHP的內存限制,所以foreach退出。
try
{
foreach()
}catch (exception $e)
{
echo $e;
}
這是行不通的。我如何拋出異常?
內存超出是一個致命錯誤,不是一個例外,不能用try/catch塊處理。 你需要的是set_error_handler。
編輯:如果這不起作用,你可以使用register_shutdown_function作爲最後的手段,並檢查腳本是否被停止和錯誤。
我不認爲這是可能的。內存超過是一個致命的不可恢復的錯誤。所以當發生這種情況時應該終止頁面。
但我發現漁獲E_ERROR這個問題:How do I catch a PHP Fatal Error
根據你的循環裏面發生了什麼,你可以使用memory_get_usage()
功能。這不會解決任何與內存相關的問題,但至少可以防止PHP因超出memory_limit而退出。例如:
try{
$memory_limit = 1*1024*1024; /* 1M, this should be lower than memory_limit */
foreach($something as $anything){
if(memory_get_usage() >= $memory_limit){
throw new Exception('Memory limit exceeded!');
}
}
}
catch(Exception $ex){
//handle error, optionally freeing memory by unset()-ing unused variables
}
你能再粘貼一些代碼嗎?就目前而言,我所看到的只是語法錯誤。另外,你的意思是不工作? – BoltClock 2010-10-04 18:36:50
你爲什麼不明白這是一個虛擬代碼? – zod 2010-10-04 18:45:39
@zod你的虛擬代碼是沒用的,也可能被忽略。你可以至少已經做了foreach(){/ *內存限制超過這裏* /}' – meagar 2010-10-04 18:47:46