私は現在strtoupper($_SERVER['REQUEST_METHOD'])
自分のコードを持っています。
しかし、strtoupper
電話は必要ですか?$_SERVER['REQUEST_METHOD']
すでに大文字であることが保証されていますか?
私は現在strtoupper($_SERVER['REQUEST_METHOD'])
自分のコードを持っています。
しかし、strtoupper
電話は必要ですか?$_SERVER['REQUEST_METHOD']
すでに大文字であることが保証されていますか?
RFC 3875では、REQUEST_METHOD
変数は大文字として定義されているため、それに依存しても問題ありません。
REQUEST_METHOD メタ変数は、スクリプトがリクエストを処理するために使用するメソッドに設定する必要があります ...
REQUEST_METHOD = method method = "GET" | "POST" | "HEAD" | extension-method extension-method = "PUT" | "DELETE" | token
メソッドは大文字と小文字を区別します。
これは完全に SAPI 固有のものであり、私が知る限り、大文字のメソッド名を強制する PHP の「仕様」には何もありません。AOL サーバー SAPI のコード スニペットを次に示します。
Ns_RegisterRequest(ctx->ns_server, "POST", value, php_ns_request_handler, NULL, ctx, 0);
誰かがそれを小文字に変更するPOST
場合post
。
を 1 回呼び出すstrtoupper()
だけでまったく費用がかからないため、リスクを冒さずにそのまま使用してください。
はい、それは PHP が php 5.4 で内部的に探すものです
http://lxr.php.net/opengrok/xref/PHP_5_4/main/SAPI.c#456
454 if (SG(server_context)) {
455 if (PG(enable_post_data_reading) && SG(request_info).request_method) {
456 if (SG(request_info).content_type && !strcmp(SG(request_info).request_method, "POST")) {
http://lxr.php.net/opengrok/xref/PHP_5_4/main/SAPI.c#797
796 } else if (SG(request_info).proto_num > 1000 &&
797 SG(request_info).request_method &&
798 strcmp(SG(request_info).request_method, "HEAD") &&
799 strcmp(SG(request_info).request_method, "GET")) {
サーバーからこれらの値が供給されますが、データを渡すための仕様に準拠していない場合、サーバーの動作が不適切です...ただし、HTTP RFC は大文字のみを示しています。ですから、それが実際に問題になることは決してありません。
これらの理由により、大文字が保証されます。
通常はそうですが、100% 当てにすることはできません。このようなものは、新しいソフトウェア バージョンまたは別の構成で変更される可能性があります。サーバーのアップグレードでコードを壊すような小さなものは本当に必要ありません。比較する場合は、両方の文字列が小文字または大文字であることを常に確認してください。
PHPのドキュメントでは、この変数には GET、HEAD、POST、または PUT の 4 つの値があり、すべて大文字であることが示されているようです。== 比較の代わりに常に strcasecmp を実行できます。