02.03.2020 17:30

Функция для получения HTTP статусов в PHP

Функция для получения HTTP статусов в PHP

В этой статье я поделюсь с вами функцией для получения HTTP статусов в PHP. Для определенных задач мне понадобился массив всех статусов HTTP, где ключ — это код состояния HTTP, значение — описание ответа HTTP. Также необходимо было получить все HTTP статусы по заданной категории или типу. Используйте эту функцию для получения HTTP статусов в 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;
}

После вызова этой функции ожидается следующий результат:

Другие статьи