Detecting request type in PHP (GET, POST, PUT or DELETE)
如何检测在PHP中使用了哪些请求类型(get、post、put或delete)?
通过使用
1 | $_SERVER['REQUEST_METHOD'] |
例子
1 2 3 | if ($_SERVER['REQUEST_METHOD'] === 'POST') { // The request is using the POST method } |
号
有关更多详细信息,请参阅$u服务器变量的文档。
PHP中的休息可以非常简单地完成。创建http://example.com/test.php(概述如下)。在REST调用中使用它,例如http://example.com/test.php/testing/123/hello。这可以与Apache和LightTPD一起使用,不需要重写规则。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php $method = $_SERVER['REQUEST_METHOD']; $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); switch ($method) { case 'PUT': do_something_with_put($request); break; case 'POST': do_something_with_post($request); break; case 'GET': do_something_with_get($request); break; default: handle_error($request); break; } |
可以使用以下代码段检测HTTP方法或所谓的
1 2 3 4 5 6 7 8 9 10 11 12 | $method = $_SERVER['REQUEST_METHOD'] if ($method == 'POST') { // Method is POST } elseif ($method == 'GET') { // Method is GET } elseif ($method == 'PUT') { // Method is PUT } elseif ($method == 'DELETE') { // Method is DELETE } else { // Method unknown } |
。
如果您喜欢使用
如果HTML表单中需要除
1 2 3 4 5 6 7 8 9 | <!-- DELETE method --> <form action='' method='POST'> <input type="hidden" name'_METHOD' value="DELETE"> </form> <!-- PUT method --> <form action='' method='POST'> <input type="hidden" name'_METHOD' value="PUT"> </form> |
有关HTTP方法的更多信息,我想参考以下stackoverflow问题:
HTTP协议的Put和Delete及其在PHP中的应用
因为这是关于REST的,仅仅从服务器获取请求方法是不够的。您还需要接收RESTful路由参数。分离restful参数和get/post/put参数的原因是资源需要有自己的唯一URL来进行标识。
下面是使用slim在PHP中实现RESTful路由的一种方法:
https://github.com/codeguy/slim
1 2 3 4 5 | $app = new \Slim\Slim(); $app->get('/hello/:name', function ($name) { echo"Hello, $name"; }); $app->run(); |
。
并相应地配置服务器。
下面是使用Altorouter的另一个示例:
网址:https://github.com/dannyvankooten/altorouter
1 2 3 4 5 6 7 8 | $router = new AltoRouter(); $router->setBasePath('/AltoRouter'); // (optional) the subdir AltoRouter lives in // mapping routes $router->map('GET|POST','/', 'home#index', 'home'); $router->map('GET','/users', array('c' => 'UserController', 'a' => 'ListAction')); $router->map('GET','/users/[i:id]', 'users#show', 'users_show'); $router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); |
我们还可以使用输入过滤器检测请求方法,同时通过输入环境卫生提供安全性。
1 |
您可以使用
1 |
。
更多信息:
http://php.net/manual/en/function.getenv.php
It is Very Simple just use $_SERVER['REQUEST_METHOD'];
号
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $method = $_SERVER['REQUEST_METHOD']; switch ($method) { case 'GET': //Here Handle GET Request break; case 'POST': //Here Handle POST Request break; case 'DELETE': //Here Handle DELETE Request break; case 'PUT': //Here Handle PUT Request break; } ?> |
。
1 2 3 | $request = new \Zend\Http\PhpEnvironment equest(); $httpMethod = $request->getMethod(); |
。
这样,您也可以在Zend框架2中实现。谢谢。
在核心PHP中,您可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | <?php $method = $_SERVER['REQUEST_METHOD']; switch ($method) { case 'GET': //Here Handle GET Request echo 'You are using '.$method.' Method'; break; case 'POST': //Here Handle POST Request echo 'You are using '.$method.' Method'; break; case 'PUT': //Here Handle PUT Request echo 'You are using '.$method.' Method'; break; case 'PATCH': //Here Handle PATCH Request echo 'You are using '.$method.' Method'; break; case 'DELETE': //Here Handle DELETE Request echo 'You are using '.$method.' Method'; break; case 'COPY': //Here Handle COPY Request echo 'You are using '.$method.' Method'; break; case 'OPTIONS': //Here Handle OPTIONS Request echo 'You are using '.$method.' Method'; break; case 'LINK': //Here Handle LINK Request echo 'You are using '.$method.' Method'; break; case 'UNLINK': //Here Handle UNLINK Request echo 'You are using '.$method.' Method'; break; case 'PURGE': //Here Handle PURGE Request echo 'You are using '.$method.' Method'; break; case 'LOCK': //Here Handle LOCK Request echo 'You are using '.$method.' Method'; break; case 'UNLOCK': //Here Handle UNLOCK Request echo 'You are using '.$method.' Method'; break; case 'PROPFIND': //Here Handle PROPFIND Request echo 'You are using '.$method.' Method'; break; case 'VIEW': //Here Handle VIEW Request echo 'You are using '.$method.' Method'; break; Default: echo 'You are using '.$method.' Method'; break; } ?> |
号
我用了这个密码。它应该能工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 | function get_request_method() { $request_method = strtolower($_SERVER['REQUEST_METHOD']); if($request_method != 'get' && $request_method != 'post') { return $request_method; } if($request_method == 'post' && isset($_POST['_method'])) { return strtolower($_POST['_method']); } return $request_method; } |
号
上述代码将与
1 2 3 4 | <form method="post"> <input name="_method" type="hidden" value="delete" /> <input type="submit" value="Submit"> </form> |
号
当一个方法被请求时,它将有一个
1 2 3 4 5 | $m=['GET'=>$_GET,'POST'=>$_POST]; foreach($m as$k=>$v){ echo count($v)? $k.' was requested.':null; } |
号
3v4l.org/u51te
您可以获得任何查询字符串数据,即
您必须使用
post data指的是像表单