gpt4 book ai didi

php - 如何处理 REST api 中的 php 通知、警告和错误?

转载 作者:可可西里 更新时间:2023-10-31 22:05:26 25 4
gpt4 key购买 nike

在 REST API 中,200 响应表明操作成功。 PHP 默认直接在响应体中输出错误信息而不改变响应码。在 SPA 中,响应文本对用户不直接可见。因此,当应用程序无法按预期工作时,我会通过 FireBug 检查响应正文以检查可能的 PHP 异常(这会导致无效的 json 响应)。有什么方法可以针对所有 PHP 错误发送特定的 HTTP 代码吗?

有没有办法根据任何 PHP 错误的存在来更改 HTTP 响应代码?或者,是否可以获取错误文本并以 json 格式轻松发送。 (开发阶段)

更新:异常捕获 (try/catch/final) 不是我要找的。

最佳答案

例如,假设您只关心致命的运行时错误、致命的编译时错误和运行时警告。使用 error_reporting() 将错误报告设置为所需级别功能。

error_reporting( E_ERROR | E_COMPILE_ERROR | E_WARNING );

由于用户定义的错误处理程序(下文)无法处理 fatal error ,因此仍会显示 fatal error 消息。为避免使用 ini_set()函数并将 display_errors 设置为零。

ini_set( 'display_errors', 0 );

现在使用 set_error_handler() 创建自定义错误处理程序完全绕过指定错误类型的 PHP 错误处理程序(不适用于 fatal error )。

/* The following error types cannot be handled with a user defined function: 
* E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING
* The standard PHP error handler is completely bypassed for the error types specified
* unless the callback function returns FALSE.
*/
function exception_error_handler( $severity, $message, $file, $line )
{
if ( !( error_reporting() & $severity ) ) {
// This error code is not included in error_reporting
return;
}

// code for handling errors
}
set_error_handler( "exception_error_handler" );

可以使用 register_shutdown_function() 在关闭时处理 fatal error .关闭处理程序在脚本完成或终止后执行(这也适用于错误)。我们需要获取有关发生的最后一个错误的信息 ( error_get_last() ),接下来是检查这是否是我们跟踪的错误类型(这里不需要它,因为 中未指定的错误error_reporting 不会被触发,但它可以用于过滤错误),最后调用异常处理程序。

function fatal_error_shutdown() 
{
$last_error = error_get_last();
if ( error_reporting() & $last_error['type'] )
call_user_func_array( 'exception_error_handler', $last_error );
}
register_shutdown_function( 'fatal_error_shutdown' );

现在您可以使用自定义异常处理程序来捕获未处理的异常(包括致命异常)并强制响应代码(使用 header() 函数)。

关于php - 如何处理 REST api 中的 php 通知、警告和错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29959986/

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