gpt4 book ai didi

php - 你能告诉 PHP 在发生错误时发送 header (如 500)吗?

转载 作者:可可西里 更新时间:2023-11-01 00:01:12 24 4
gpt4 key购买 nike

在我当前的项目中,我使用普通 HTTP 请求查询 PHP,但也通过 AJAX 查询,有时我返回 JSON 格式的数据,有时返回普通文本。当发生错误时,在正常请求中,您会看到错误消息并可以采取一些措施。另一方面,对于 AJAX 请求,您无法确定是否收到错误或您想要的数据,因为它没有直接显示——您只会遇到麻烦,因为您的应用程序将无法再工作。

所以我想到了一个错误处理系统。我最好的想法是在发生错误时发送 500“Internal Server Error” header ,因此在我的 JS 中,当我发送 AJAX 请求时,我可以简单地检查错误并处理它。

不幸的是,PHP 本身不会发送这种 header (比如当您遇到解析错误或代码中出现问题时)。

你能:

a) 如果发生错误,告诉 PHP 发送 500 之类的 header ?或者
b) 使用 set_error_handler 发送一个 500-header 然后调用 PHP 常规错误处理?或者
c) 发生 PHP 错误时,您能否以任何其他方式发送错误 header ?

最佳答案

我更喜欢使用异常来处理错误。首先,您需要安装 error-to-exception 错误处理程序(http://php.net/manual/en/class.errorexception.php,示例 1),然后将您的主要应用程序代码包装在 try-catch block 中并发送catch 部分中的适当 header 。例如:

try {
$myApplication->run();
} catch(Exception $e) {
// log or otherwise register the error
header('HTTP/1.1 500 Internal Server Error');
}

不幸的是,这不适用于所谓的“ fatal error ”,要处理这些错误,您必须使用像这样的愚蠢技巧

ob_start();

register_shutdown_function(function() {
$p = ob_get_contents();
if(preg_match('~Fatal error~', $p))
header('HTTP/1.0 500 Internal Server Error');
});

...your code...

关于php - 你能告诉 PHP 在发生错误时发送 header (如 500)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6290253/

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