やりたいことは、PHP-から一般的な方法で404
ステータスコードを送信することです。Router::statusCode(404)
とRouter::statusCode(403)
の両方が動作するはずです、およびその他の有効なHTTPステータスコード。
header
の3番目のパラメーターとしてステータスコードを指定できることは知っています。悲しいことに、これはstring
を指定した場合にのみ機能します。したがって、header('', false, 404)
を呼び出しても、notは機能しません。
さらに、header
呼び出しを介してステータスコードを送信できることも知っています。header('HTTP/1.1 404 Not Found')
しかし、これを行うには、すべてのステータスコード(Not Found
)の理由フレーズ(404
)の配列を維持する必要があります。これは、PHPが既に3番目のheader
パラメーターに対して)行っていることの重複であるため、この考えは好きではありません。
だから、私の質問は次のとおりです。PHPでステータスコードを送信する簡単でクリーンな方法はありますか?
このための新しい関数がPHP> = 5.4.0 _http_response_code
_ にあります
単にhttp_response_code(404)
を実行してください。
より低いPHPバージョンがある場合は、header(' ', true, 404);
を試してください(文字列の空白に注意してください)。
理由フレーズも設定する場合は、次を試してください。
_header('HTTP/ 433 Reason Phrase As You Wish');
_
コードの実際のテキストは無関係です。できる
header('The goggles, they do nawtink!', true, 404);
ブラウザからはまだ404として認識されます。重要なのはコードです。
Zend Frameworkには、Zend_Http_Response
Zend_Http_Response::$messages
に含まれるもの:
/**
* List of all known HTTP response codes - used by responseCodeAsText() to
* translate numeric codes to messages.
*
* @var array
*/
protected static $messages = array(
// Informational 1xx
100 => 'Continue',
101 => 'Switching Protocols',
// Success 2xx
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
// Redirection 3xx
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found', // 1.1
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
// 306 is deprecated but reserved
307 => 'Temporary Redirect',
// Client Error 4xx
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',
// Server Error 5xx
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
509 => 'Bandwidth Limit Exceeded'
);
Zend-frameworkを使用していない場合でも、個人用にこれを分割できる場合があります。
ええ、これをしてください...
header('x', true, 404);
最初の文字列パラメーターには、:
を含まないものを指定できます。 PHPは標準フレーズに置き換えられます。2番目のパラメーターは「常に置き換える」を指定し、3番目は必要なステータスコードです。
参照: