header('.', TRUE, 404);
簡単な質問: 、などの動作に依存できますheader('.', TRUE, 501);
か?
さて、詳しく説明させてください。
質問をする前に、呼び出しのいくつかの使用法と、header()
呼び出しによって生成された対応するHTTP応答コードを示します。
header('HTTP/1.1 404 Bummer!');
- HTTP/1.1 404 Bummer!
header('HTTP/1.1 501 I am sick');
- HTTP/1.1 501 I am sick
header('Bummer!', TRUE, 404);
- HTTP/1.1 404 Not Found
header('I am sick', TRUE, 501);
- HTTP/1.1 501 Method Not Implemented
したがって、最初のパラメーターがジャンクであるときに3番目のパラメーターを使用すると、最初のパラメーターが無視されることがわかります。ただし、 http ://php.net/manual/en/function.header.phpのドキュメントには次のように記載されています。
このパラメータは、文字列が空でない場合にのみ効果があることに注意してください。
したがって、最初のパラメータに何かを入力する必要があります。$string
3番目のパラメーターで指定するときには無視されるため、これは少し醜いように見えますが、使用されることはない場合でも、$http_response_code
値を入力する必要があります。$string
しかし、なぜこれがこのようになったのかは理解できます。従来は、header()
パラメータのみを受け入れ、最初の2つの例のように任意の応答コードを設定できました。2番目と3番目のパラメーターは、オプションのパラメーターとして後で追加されました。したがって、2番目と3番目を使用する場合は、最初のパラメーターに何かを指定する必要があります。さらに、最初のパラメーターに有効なヘッダーを入れ、3番目のパラメーターに有効な応答コードを入れる必要がある場合があります。最後にそのような例を1つ含めました。
したがって、この関数をコードでこのように使用することを計画しています:、、header('.', TRUE, 404);
などheader('.', TRUE, 501);
。上記の例のように、標準に従って正しいHTTP応答を生成します。この振る舞いに頼れるかどうか知りたいです。$string
3番目の()を指定すると、最初のパラメーター()が無視されることを明示的に記載しているドキュメントが見つからないため、この質問をします$http_response_code
。
ところで、私は最初の引数がこのような状況で役立つ可能性があることを知っています。
header('Foo: Bar', TRUE, 501);
につながる:
HTTP/1.1 501 Method Not Implemented
Date: Sun, 09 Oct 2011 19:01:19 GMT
Server: Apache/2.2.20 (Debian)
X-Powered-By: PHP/5.3.8-1
Foo: Bar
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
より実用的な例は、次のように生成されます。header('Location: http://example.com/there/', TRUE, 307);
HTTP/1.1 307 Temporary Redirect
Date: Sun, 09 Oct 2011 19:09:29 GMT
Server: Apache/2.2.20 (Debian)
X-Powered-By: PHP/5.3.8-1
Location: http://example.com/there/
Vary: Accept-Encoding
Content-Type: text/html
とにかく、私の質問に戻ります。header('.', TRUE, 404);
、などの動作に依存できます header('.', TRUE, 501);
か?