如何从 PHP 脚本发送 500 内部服务器错误错误编辑

2022-08-30 07:59:40

在某些情况下,我需要从PHP脚本发送“500内部服务器错误”。该脚本应由第三方应用程序调用。该脚本包含几个语句,我需要为其发送响应代码而不是通常的。第三方脚本将在某些条件下重新发送请求,包括未收到响应代码。die("this happend")500 Internal Server Error200 OK200 OK

问题的第二部分:我需要像这样设置我的脚本:

<?php
    custom_header( "500 Internal Server Error" );

    if ( that_happened ) {
        die( "that happened" )
    }

    if ( something_else_happened ) {
        die( "something else happened" )
    }

    update_database( );

    // the script can also fail on the above line
    // e.g. a mysql error occurred

    remove_header( "500" );
?>

我只需要在执行最后一行后发送标头。200

编辑

题外话:我可以发送奇怪的500个标头,例如:

HTTP/1.1 500 No Record Found
HTTP/1.1 500 Script Generated Error (E_RECORD_NOT_FOUND)
HTTP/1.1 500 Conditions Failed on Line 23

Web服务器会记录此类错误吗?


答案 1
header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);

答案 2

PHP 5.4 有一个名为 http_response_code 的函数,所以如果你使用的是 PHP 5.4,你可以这样做:

http_response_code(500);

我已经为这个函数(Gist)写了一个polyfill,如果你运行的是5.4下的PHP版本。


为了回答您的后续问题,HTTP 1.1 RFC说:

此处列出的原因短语只是建议 - 它们可以被本地等效项替换而不影响协议。

这意味着您可以在代码本身之后使用所需的任何文本(不包括回车符或换行符),并且它将起作用。但是,通常有更好的响应代码可供使用。例如,您可以发送404(未找到)而不是使用500表示未找到记录,对于“条件失败”之类的内容(我猜是验证错误),您可以发送类似422(不可处理的实体)之类的内容。


推荐