我正在使用nginx作为我正在处理的PHP REST API。为了完全恢复,我在适当的时候使用PUT
/ DELETE
个请求。但是,PHP没有解析PUT
请求的帖子正文 - 这是我对这个特定场景所需要的。
我曾经考虑过自己解析它,但是a)我宁愿让PHP在C中做,因为它比我在PHP中提出的任何实现要快得多,而且b)人们有很多边缘情况已经花了很多时间来解决这些问题 - 我宁愿不重复这些努力。
在API方面,我已经添加了对X-HTTP-Method-Override
标题的支持,并在实际动词可用时使用它。
我现在正在寻找的是一种在nginx中采用PUT
请求的方法,并将其更改为带有该标头集的POST
请求。
我觉得我已经到处寻找但找不到解决办法。任何东西都会有所帮助(即使你推荐一种不同的解析技术,所以我不需要处理这个)。
答案 0 :(得分:3)
Nginx仅通过REQUEST_METHOD
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
之后或同样重要。
答案 1 :(得分:0)
我认为值得指出以防其他人认为这种方法在PHP中处理PUT请求(或者任何其他请求方法都没有填充到某些全局$ _WHATEVER数组中以使生活更轻松)获取put请求主体的正确方法是读取php://input
的内容。
这样的事情应该有效:
$data = file_get_contents("php://input");