2

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のドキュメントには次のように記載されています。

このパラメータは、文字列が空でない場合にのみ効果があることに注意してください。

したがって、最初のパラメータに何かを入力する必要があります。$string3番目のパラメーターで指定するときには無視されるため、これは少し醜いように見えますが、使用されることはない場合でも、$http_response_code値を入力する必要があります。$string

しかし、なぜこれがこのようになったのかは理解できます。従来は、header()パラメータのみを受け入れ、最初の2つの例のように任意の応答コードを設定できました。2番目と3番目のパラメーターは、オプションのパラメーターとして後で追加されました。したがって、2番目と3番目を使用する場合は、最初のパラメーターに何かを指定する必要があります。さらに、最初のパラメーターに有効なヘッダーを入れ、3番目のパラメーターに有効な応答コードを入れる必要がある場合があります。最後にそのような例を1つ含めました。

したがって、この関数をコードでこのように使用することを計画しています:、、header('.', TRUE, 404);などheader('.', TRUE, 501);。上記の例のように、標準に従って正しいHTTP応答を生成します。この振る舞いに頼れるかどうか知りたいです。$string3番目の()を指定すると、最初のパラメーター()が無視されることを明示的に記載しているドキュメントが見つからないため、この質問をします$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);か?

4

2 に答える 2

3

これを探しているかどうかはわかりませんが、HTTPステータスラインを作成したくないと思います。

header('.', TRUE, 501);

Apacheに次のステータス行を返させます。

HTTP/1.1 500 Internal Server Error

だが

header(' ', TRUE, 501);

Apacheに次のステータス行を返させます。

HTTP/1.1 501 Not Implemented

それはあなたが探しているものかもしれません。

たぶん、あなたはただステータスラインを構築したいですか?

header('HTTP/1.1 501 No Implementation for you :)');

これにより、Apacheは次のステータス行を返します。

HTTP/1.1 501 No Implementation for you :)

伝統的に、それはこのように行われます:

header('HTTP/1.1 501');

次に、デフォルトのステータス行メッセージテキストを取得します。

HTTP/1.1 501 Method Not Implemented

これはプロトコルバージョンを変更しません:

header('HTTP/1.0 404');

それが与えるように:

HTTP/1.1 404 Not Found

お役に立てれば。


スーサムによる更新:

PHP 5.4では、これを行うためのシンプルでエレガントな方法は次のとおりです。

http_response_code(404);

また

http_response_code(501);
于 2011-10-09T19:25:30.940 に答える
1

現在、数値のHTTP応答コードのみを設定する機能はありません。ただし、PHP 5.4は最終的にこの空白をhttp_response_code()で埋めると思います。

私は自分自身を使いませんheader(".", TRUE, 501)。一部のWebサーバーソフトウェアでは機能する可能性がありますが、すべてで機能する可能性はほとんどありません。

于 2011-10-09T19:32:37.453 に答える