How can I get php to return 500 upon encountering a fatal exception?

后端 未结 10 1504
孤独总比滥情好
孤独总比滥情好 2020-12-24 10:37

PHP fatal errors come back as status code 200 to the HTTP client. How can I make it return a status code 500 (Internal server error)?

10条回答
  •  臣服心动
    2020-12-24 11:09

    The hard thing when dealing with fatal errors (compile errors, for example a missing semicolon) is that the script won't be executed, so it won't help to set the status code in that script. However, when you include or require a script, the calling script will be executed, regardless of errors in the included script. With this, I come to this solution:

    rock-solid-script.php:

    // minimize changes to this script to keep it rock-solid
    http_response_code(500); // PHP >= 5.4
    require_once("script-i-want-to-guard-for-errors.php");
    

    script-i-want-to-guard-for-errors.php:

    // do all the processsing
    // don't produce any output
    // you might want to use output buffering
    
    http_response_code(200); // PHP >= 5.4
    
    // here you can produce the output
    

    Direct your call to the rock-solid-script.php and you're ready to go.

    I would have liked it better to set the default status code to 500 in .htaccess. That seems more elegant to me but I can't find a way to pull it off. I tried the RewriteRule R-flag, but this prevents execution of php altogether, so that's no use.

提交回复
热议问题