安全处理 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中文网其他相关文章!