4

作業中のPHPRESTAPIにnginxを使用しています。完全にRESTに対応するために、必要に応じてPUT/ DELETErequestsを使用しています。ただし、PHPはリクエストの投稿本文を解析しませんPUT。これは、この特定のシナリオに必要です。

私はそれを自分で解析することを検討しましたが、a)PHPで思いつく実装よりもかなり高速であるため、CでPHPに実行させたいと思います。b)人々がすでに費やしたエッジケースがたくさんあります。多くの時間を回避します-私はむしろそれらの努力を複製したくありません。

API側では、X-HTTP-Method-Overrideヘッダーを読み取り、実際の動詞で使用可能な場合にそれを使用するためのサポートをすでに追加しています。

私が今探しているのは、nginxでリクエストを受け取り、そのヘッダーが設定されPUTたリクエストに変更する方法だけです。POST

私はあちこちを見てきたように感じますが、解決策を見つけることができません。何かが役に立ちます(別の解析手法を推奨している場合でも、これに対処する必要はありません)。

4

2 に答える 2

3

REQUEST_METHODNginxは、 paramを介してリクエストメソッドをFastCGIに通知するだけです。したがって、値をオーバーライドして、必要なものをすべてPHPに報告することができます。Nginx構成で別の変数を宣言する必要があります。$fcgi_method元のリクエストメソッドに基づいて、名前を付けましょう。

map $request_method $fcgi_method {
  default $request_method;
  PUT POST;
}

mapセクションはhttpレベル、つまりブロックと同じ構成レベルである必要があることに注意してくださいserver

次に、次のように自分の場所で使用できます。

fastcgi_param REQUEST_METHOD  $fcgi_method;

このスニペットが典型的include fastcgi_paramsまたは類似のものであることが重要です。

于 2013-03-12T13:12:33.337 に答える
0

PHPでPUTリクエストを処理するためのこのメソッド(または、作業を簡単にするためにグローバルな$ _WHATEVER配列に入力されていない他のリクエストメソッド)を他の誰かが検討する場合に備えて、本文を取得する正しい方法を指摘する価値があると思います。 putリクエストの目的は、の内容を読み取ることですphp://input

このようなものが機能するはずです:

$data = file_get_contents("php://input");
于 2014-09-23T22:29:58.330 に答える