12

私は現在strtoupper($_SERVER['REQUEST_METHOD'])自分のコードを持っています。

しかし、strtoupper電話は必要ですか?$_SERVER['REQUEST_METHOD']すでに大文字であることが保証されていますか?

4

6 に答える 6

5

RFC 3875では、REQUEST_METHOD変数は大文字として定義されているため、それに依存しても問題ありません。

REQUEST_METHOD メタ変数は、スクリプトがリクエストを処理するために使用するメソッドに設定する必要があります ...

  REQUEST_METHOD   = method
  method           = "GET" | "POST" | "HEAD" | extension-method
  extension-method = "PUT" | "DELETE" | token

メソッドは大文字と小文字を区別します。

于 2012-05-26T12:39:42.233 に答える
0

これは完全に SAPI 固有のものであり、私が知る限り、大文字のメソッド名を強制する PHP の「仕様」には何もありません。AOL サーバー SAPI のコード スニペットを次に示します。

Ns_RegisterRequest(ctx->ns_server, "POST", value, php_ns_request_handler, NULL, ctx, 0);

誰かがそれを小文字に変更するPOST場合post

を 1 回呼び出すstrtoupper()だけでまったく費用がかからないため、リスクを冒さずにそのまま使用してください。

于 2012-05-26T12:39:33.360 に答える
0

はい、それは 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 は大文字のみを示しています。ですから、それが実際に問題になることは決してありません。

これらの理由により、大文字が保証されます。

于 2012-05-26T13:07:22.893 に答える
-1

通常はそうですが、100% 当てにすることはできません。このようなものは、新しいソフトウェア バージョンまたは別の構成で変更される可能性があります。サーバーのアップグレードでコードを壊すような小さなものは本当に必要ありません。比較する場合は、両方の文字列が小文字または大文字であることを常に確認してください。

于 2012-05-26T12:35:37.947 に答える
-2

PHPのドキュメントでは、この変数には GET、HEAD、POST、または PUT の 4 つの値があり、すべて大文字であることが示されているようです。== 比較の代わりに常に strcasecmp を実行できます。

于 2012-05-26T12:39:33.963 に答える