4

我正在将 nginx 用于我正在处理的 PHP REST API。为了完全符合 REST,我在适当的地方使用PUT/DELETE请求。但是,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;
}

(注意,mapsection 应该在level,即与blockshttp相同的配置级别)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 回答