Mar 02, 2020 5:20 PM

Function for getting HTTP statuses in PHP

Function for getting HTTP statuses in PHP

In this article I will share with you a function for getting HTTP statuses in PHP. For certain tasks, I needed an array of all HTTP statuses, where the key is the HTTP status code, the value is the description of the HTTP response. It was also necessary to get all HTTP statuses for a given category or type. Use this function to get HTTP statuses in PHP:

const HTTP_STATUS_TYPE_INFORMATIONAL = 1;
const HTTP_STATUS_TYPE_SUCCESS       = 2;
const HTTP_STATUS_TYPE_REDIRECTION   = 3;
const HTTP_STATUS_TYPE_CLIENT_ERROR  = 4;
const HTTP_STATUS_TYPE_SERVER_ERROR  = 5;

function getHttpStatuses($type = null)
{
    $result = [
        // 1xx - Informational response
        100 => 'Continue',
        101 => 'Switching Protocols',
        102 => 'Processing',

        // 2xx - Success
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        203 => 'Non-Authoritative Information',
        204 => 'No Content',
        205 => 'Reset Content',
        206 => 'Partial Content',
        207 => 'Multi-Status',
        208 => 'Already Reported',
        226 => 'IM Used',

        // 3xx - Redirection
        300 => 'Multiple Choices',
        301 => 'Moved Permanently',
        302 => 'Found (Moved Temporarily)',
        303 => 'See Other',
        304 => 'Not Modified',
        305 => 'Use Proxy',
        306 => 'Switch Proxy',
        307 => 'Temporary Redirect',
        308 => 'Permanent Redirect',

        // 4xx - Client Error
        400 => 'Bad Request',
        401 => 'Unauthorized',
        402 => 'Payment Required',
        403 => 'Forbidden',
        404 => 'Not Found',
        405 => 'Method Not Allowed',
        406 => 'Not Acceptable',
        407 => 'Proxy Authentication Required',
        408 => 'Request Timeout',
        409 => 'Conflict',
        410 => 'Gone',
        411 => 'Length Required',
        412 => 'Precondition Failed',
        413 => 'Payload Too Large',
        414 => 'URI Too Long',
        415 => 'Unsupported Media Type',
        416 => 'Range Not Satisfiable',
        417 => 'Expectation Failed',
        418 => 'I’m a teapot',
        421 => 'Misdirected Request',
        422 => 'Unprocessable Entity',
        423 => 'Locked',
        424 => 'Failed Dependency',
        425 => 'Too Early',
        426 => 'Upgrade Required',
        428 => 'Precondition Required',
        429 => 'Too Many Requests',
        431 => 'Request Header Fields Too Large',
        444 => 'Connection Closed Without Response',
        449 => 'Retry With',
        451 => 'Unavailable For Legal Reasons',
        499 => 'Client Closed Request',

        // 5xx - Server Error
        500 => 'Internal Server Error',
        501 => 'Not Implemented',
        502 => 'Bad Gateway',
        503 => 'Service Unavailable',
        504 => 'Gateway Timeout',
        505 => 'HTTP Version Not Supported',
        506 => 'Variant Also Negotiates',
        507 => 'Insufficient Storage',
        508 => 'Loop Detected',
        509 => 'Bandwidth Limit Exceeded',
        510 => 'Not Extended',
        511 => 'Network Authentication Required',
        520 => 'Unknown Error',
        521 => 'Web Server Is Down',
        522 => 'Connection Timed Out',
        523 => 'Origin Is Unreachable',
        524 => 'A Timeout Occurred',
        525 => 'SSL Handshake Failed',
        526 => 'Invalid SSL Certificate',
        599 => 'Network Connect Timeout Error',
    ];

    if (!is_null($type)) {
        $result = array_filter($result, function ($key) use ($type) {
            return substr($key, 0, 1) == $type;
        }, ARRAY_FILTER_USE_KEY);
    }

    return $result;
}

The following result is expected after calling this function:

Other articles