安全處理PHP 中的致命錯誤
PHP 的錯誤處理功能包括捕獲諸如「允許的記憶體大小耗盡」之類的致命錯誤。當腳本消耗過多記憶體時會出現此錯誤。您可以向使用者返回自訂訊息,而不是增加記憶體限制。
一個有效的方法是利用 register_shutdown_function()。此函數註冊一個檢查 error_get_last() 的回呼。透過在腳本運行完成後檢查錯誤,您可以確定是否發生了致命錯誤並妥善處理。
這裡是一個範例實作:
<code class="php">ini_set('display_errors', false); error_reporting(-1); set_error_handler(function($code, $string, $file, $line){ throw new ErrorException($string, null, $code, $file, $line); }); register_shutdown_function(function(){ $error = error_get_last(); if(null !== $error) { echo 'Caught at shutdown'; } }); try { while(true) { $data .= str_repeat('#', PHP_INT_MAX); } } catch(\Exception $exception) { echo 'Caught in try/catch'; }</code>
執行時,此腳本列印“ Caught at shutdown”,表示在 shutdown 函數中捕獲了致命錯誤。
您可以檢查 shutdown 函數中的 $error 陣列來確定錯誤原因並採取適當的操作,例如重新發出使用不同參數的請求或回傳回應。
需要注意的是,雖然建議將 error_reporting() 保持在較高級別 (-1),但您仍然應該使用 set_error_handler() 和 ErrorException 來處理所有其他錯誤需要防止腳本執行期間出現問題。
以上是如何安全處理 PHP 中的致命錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!