检测 PHP 中的请求类型(GET、POST、PUT 或 DELETE)
如何检测 PHP 中使用了哪种请求类型(GET、POST、PUT 或 DELETE)?
How can I detect which request type was used (GET, POST, PUT or DELETE) in PHP?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(14)
通过使用
示例
了解更多详细信息,请参阅$_SERVER 变量的文档 。
By using
Example
For more details please see the documentation for the $_SERVER variable.
PHP 中的 REST 可以非常简单地完成。 创建 http://example.com/test.php (概述如下)。 将其用于 REST 调用,例如 http://example.com/test.php/testing/ 123/你好。 这可以与 Apache 和 Lighttpd 一起使用,无需重写规则。
REST in PHP can be done pretty simple. Create http://example.com/test.php (outlined below). Use this for REST calls, e.g. http://example.com/test.php/testing/123/hello. This works with Apache and Lighttpd out of the box, and no rewrite rules are needed.
可以使用以下代码片段来检测 HTTP 方法或所谓的
REQUEST METHOD
。如果您更喜欢使用
switch
而不是if-else
语句,也可以使用它。如果 HTML 表单中需要
GET
或POST
以外的方法,通常可以使用表单中的隐藏字段来解决。有关 HTTP 方法的更多信息,我想参考以下 StackOverflow 问题:
HTTP协议的PUT和DELETE及其在PHP中的使用
Detecting the HTTP method or so called
REQUEST METHOD
can be done using the following code snippet.You could also do it using a
switch
if you prefer this over theif-else
statement.If a method other than
GET
orPOST
is required in an HTML form, this is often solved using a hidden field in the form.For more information regarding HTTP methods I would like to refer to the following StackOverflow question:
HTTP protocol's PUT and DELETE and their usage in PHP
我们还可以使用 input_filter 来检测请求方法,同时也提供安全性通过输入卫生。
We can also use the input_filter to detect the request method while also providing security through input sanitation.
您可以使用
getenv
函数,而不必使用$_SERVER
变量:更多信息:
http://php.net/manual/en/function.getenv.php
You can use
getenv
function and don't have to work with a$_SERVER
variable:More info:
http://php.net/manual/en/function.getenv.php
由于这是关于 REST 的,因此仅从服务器获取请求方法是不够的。 您还需要接收 RESTful 路由参数。 将 RESTful 参数和 GET/POST/PUT 参数分开的原因是资源需要有自己唯一的 URL 来标识。
以下是使用 Slim 在 PHP 中实现 RESTful 路由的一种方法:
https://github.com/codeguy/Slim
并相应地配置服务器。
这是使用 AltoRouter 的另一个示例:
https://github.com/dannyvankooten/AltoRouter
Since this is about REST, just getting the request method from the server is not enough. You also need to receive RESTful route parameters. The reason for separating RESTful parameters and GET/POST/PUT parameters is that a resource needs to have its own unique URL for identification.
Here's one way of implementing RESTful routes in PHP using Slim:
https://github.com/codeguy/Slim
And configure the server accordingly.
Here's another example using AltoRouter:
https://github.com/dannyvankooten/AltoRouter
这很简单。 只需使用
$_SERVER['REQUEST_METHOD'];
。例子:
It is very simple. Just use
$_SERVER['REQUEST_METHOD'];
.Example:
在核心 php 中你可以这样做:
In core php you can do like this :
TL;DR
“true 的本机来源”是
$_SERVER
全局变量。 请求方法保存在“REQUEST_METHOD”键下。
检查 $_SERVER 数组
$_SERVER['REQUEST_METHOD']
PHP 方法
但是您可以使用很多解决方法来获取方法。 像filter_input一样:
filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
库
或者您使用外部库,例如:
Symfony\Component\HttpFoundation\Request
\Zend\Http\PhpEnvironment\Request
结论
但最简单的方法是使用:
$ _SERVER['REQUEST_METHOD']
。TL;DR
The "native source of true" is the
$_SERVER
global variable. The request Methodis saved under the key "REQUEST_METHOD".
Check the $_SERVER array
$_SERVER['REQUEST_METHOD']
PHP Methods
But you can use a lot of workarounds to get the Method. Like filter_input:
filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
Libs
Or you use external libs like:
Symfony\Component\HttpFoundation\Request
\Zend\Http\PhpEnvironment\Request
Conclusion
But the easiest way would be to use:
$_SERVER['REQUEST_METHOD']
.这样在zend框架2中也可以实现。
In this way you can also achieve in zend framework 2 also.
值得注意的是,即使您发送其他类型的正确请求,PHP 也会填充所有
$_GET
参数。上面回复中的方法是完全正确的,但是如果您想在处理
POST
、DELETE
、PUT< 时额外检查
GET
参数/code>等请求,需要检查$_GET
数组的大小。It is valuable to additionally note, that PHP will populate all the
$_GET
parameters even when you send a proper request of other type.Methods in above replies are completely correct, however if you want to additionaly check for
GET
parameters while handlingPOST
,DELETE
,PUT
, etc. request, you need to check the size of$_GET
array.当请求一个方法时,它将有一个
数组
。 因此,只需使用count()
检查即可。3v4l.org/U51TE
When a method was requested, it will have an
array
. So simply check withcount()
.3v4l.org/U51TE
我用了这段代码。 它应该有效。
上面的代码适用于
REST调用
,也适用于html表单
I used this code. It should work.
This above code will work with
REST calls
and will also work withhtml form
您可以获取任何查询字符串数据,即
www.example.com?id=2&name=r
您必须使用
$_GET['id']
或获取数据>$_REQUEST['id']
。发布数据意味着像表单
You can get any query string data i.e
www.example.com?id=2&name=r
You must get data using
$_GET['id']
or$_REQUEST['id']
.Post data means like form
<form action='' method='POST'>
you must use$_POST
or$_REQUEST
.