Skip to content

Instantly share code, notes, and snippets.

@hongster
Last active May 17, 2024 04:30
Show Gist options
  • Save hongster/797dd0a3911e25f8b3304782eb0f3934 to your computer and use it in GitHub Desktop.
Save hongster/797dd0a3911e25f8b3304782eb0f3934 to your computer and use it in GitHub Desktop.
Mocking different HTTP status codes, useful for testing error handling.
<?php
/* For stimulating different HTTP status code.
* Example usage: curl -i "http://example.com/index.php/418"
*/
$status = [
200 => 'OK',
201 => 'Created',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
207 => 'Multi-Status (WebDAV)',
208 => 'Already Reported (WebDAV)',
226 => 'IM Used',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => '(Unused)',
307 => 'Temporary Redirect',
308 => 'Permanent Redirect (experimental)',
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 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
418 => "I'm a teapot (RFC 2324)",
420 => 'Enhance Your Calm (Twitter)',
422 => 'Unprocessable Entity (WebDAV)',
423 => 'Locked (WebDAV)',
424 => 'Failed Dependency (WebDAV)',
425 => 'Reserved for WebDAV',
426 => 'Upgrade Required',
428 => 'Precondition Required',
429 => 'Too Many Requests',
431 => 'Request Header Fields Too Large',
444 => 'No Response (Nginx)',
449 => 'Retry With (Microsoft)',
450 => 'Blocked by Windows Parental Controls (Microsoft)',
451 => 'Unavailable For Legal Reasons',
499 => 'Client Closed Request (Nginx)',
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 (Experimental)',
507 => 'Insufficient Storage (WebDAV)',
508 => 'Loop Detected (WebDAV)',
509 => 'Bandwidth Limit Exceeded (Apache)',
510 => 'Not Extended',
511 => 'Network Authentication Required',
598 => 'Network read timeout error',
599 => 'Network connect timeout error',
];
$code = determineCode();
http_response_code($code);
if (isset($status[$code])) {
echo $status[$code];
}
/**
* Determine the code to stimulate, by checking the last segment of URL path.
* E.g. http://example.com/index.php/404 => 404
* Return 200 if no code defined.
*/
function determineCode(): int {
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($path == '/') {
return 200;
}
$segments = explode('/', rtrim($path, '/'));
return intval(end($segments));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment