Network 函数
在线手册:中文  英文

http_response_code

(PHP 5 >= 5.4.0)

http_response_codeGet or Set the HTTP response code

说明

int http_response_code ([ int $response_code ] )

If you pass no parameters then http_response_code will get the current status code. If you pass a parameter it will set the response code.

参数

response_code

The optional response_code will set the response code.

<?php
http_response_code
(404);
?>

返回值

The current response code. By default the return value is int(200).

范例

Example #1 Examples using http_response_code()

<?php

// Get the current default response code
var_dump(http_response_code()); // int(200)

// Set our response code
http_response_code(404);

// Get our new response code
var_dump(http_response_code()); // int(404)
?>

以上例程会输出:

参见


Network 函数
在线手册:中文  英文

用户评论:

Richard F. (2013-06-15 10:19:45)

At least on my side with php-fpm and nginx this method does not change the text in the response, only the code.

<?php

// HTTP/1.1 404 Not Found
http_response_code(404);

?>

The resulting response is HTTP/1.1 404 OK

Rob Zazueta (2013-05-09 16:43:54)

The note above from "Anonymous" is wrong. I'm running this behind the AWS Elastic Loadbalancer and trying the header(':'.$error_code...) method mentioned above is treated as invalid HTTP.

The documentation for the header() function has the right way to implement this if you're still on < php 5.4:

<?php
header
("HTTP/1.0 404 Not Found");
?>

Anonymous (2012-07-17 11:35:43)

If you don't have PHP 5.4 and want to change the returned status code, you can simply write:
<?php
header
(':'true$statusCode);
?>

The ':' are mandatory, or it won't work

craig at craigfrancis dot co dot uk (2012-01-25 16:38:45)

If your version of PHP does not include this function:

<?php

    
if (!function_exists('http_response_code')) {
        function 
http_response_code($code NULL) {

            if (
$code !== NULL) {

                switch (
$code) {
                    case 
100$text 'Continue'; break;
                    case 
101$text 'Switching Protocols'; break;
                    case 
200$text 'OK'; break;
                    case 
201$text 'Created'; break;
                    case 
202$text 'Accepted'; break;
                    case 
203$text 'Non-Authoritative Information'; break;
                    case 
204$text 'No Content'; break;
                    case 
205$text 'Reset Content'; break;
                    case 
206$text 'Partial Content'; break;
                    case 
300$text 'Multiple Choices'; break;
                    case 
301$text 'Moved Permanently'; break;
                    case 
302$text 'Moved Temporarily'; break;
                    case 
303$text 'See Other'; break;
                    case 
304$text 'Not Modified'; break;
                    case 
305$text 'Use Proxy'; break;
                    case 
400$text 'Bad Request'; break;
                    case 
401$text 'Unauthorized'; break;
                    case 
402$text 'Payment Required'; break;
                    case 
403$text 'Forbidden'; break;
                    case 
404$text 'Not Found'; break;
                    case 
405$text 'Method Not Allowed'; break;
                    case 
406$text 'Not Acceptable'; break;
                    case 
407$text 'Proxy Authentication Required'; break;
                    case 
408$text 'Request Time-out'; break;
                    case 
409$text 'Conflict'; break;
                    case 
410$text 'Gone'; break;
                    case 
411$text 'Length Required'; break;
                    case 
412$text 'Precondition Failed'; break;
                    case 
413$text 'Request Entity Too Large'; break;
                    case 
414$text 'Request-URI Too Large'; break;
                    case 
415$text 'Unsupported Media Type'; break;
                    case 
500$text 'Internal Server Error'; break;
                    case 
501$text 'Not Implemented'; break;
                    case 
502$text 'Bad Gateway'; break;
                    case 
503$text 'Service Unavailable'; break;
                    case 
504$text 'Gateway Time-out'; break;
                    case 
505$text 'HTTP Version not supported'; break;
                    default:
                        exit(
'Unknown http status code "' htmlentities($code) . '"');
                    break;
                }

                
$protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0');

                
header($protocol ' ' $code ' ' $text);

                
$GLOBALS['http_response_code'] = $code;

            } else {

                
$code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200);

            }

            return 
$code;

        }
    }

?>

In this example I am using $GLOBALS, but you can use whatever storage mechanism you like... I don't think there is a way to return the current status code:

https://bugs.php.net/bug.php?id=52555

For reference the error codes I got from PHP's source code:

http://lxr.php.net/opengrok/xref/PHP_5_4/sapi/cgi/cgi_main.c#354

And how the current http header is sent, with the variables it uses:

http://lxr.php.net/opengrok/xref/PHP_5_4/main/SAPI.c#856

易百教程