如何在PHP中检测使用了哪种请求类型(GET,POST,PUT或DELETE)?
通过使用
$_SERVER['REQUEST_METHOD']
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // The request is using the POST method }
有关更多详细信息,请参阅$ _SERVER变量的文档.
PHP中的REST可以非常简单地完成.创建http://example.com/test.php(概述如下).用于REST调用,例如http://example.com/test.php/testing/123/hello.这适用于Apache和Lighttpd开箱即用,不需要重写规则.
如果你想让你的API可用,而不引用你正在使用的解释引擎,在RewriteRule上添加一个包含RewriteEngine的.htaccess文件^ api /(.*)$ api.php/$ 1这假设你的API文件叫做api. PHP.此外,由于编写了上面的代码块,PHP开发人员已经折旧了split函数.如果用爆炸替换split,它可以正常工作.
我通常用!而不是@.更好的练习?
在`$ _SERVER ['PATH_INFO']`前面的`@`是什么?
@Svish,你注意到了一个很棒的细节!如果PATH_INFO不在`$ _SERVER`中,它将摆脱`PHP注意:未定义的索引:PATH_INFO`.我马上把它添加到我的包里!这是一种说法,"我知道在这个阵列中可能没有一个以这种方式命名的条目,我已经为此做好了准备,所以只需闭嘴并做我告诉你的事情".:)谢谢大家,他们都发布了这个答案,并将我的注意力集中在其中.
作为使用变量方法的更简洁的方法:`<?php $ request = explode("/",substr(@ $ _ SERVER ['PATH_INFO'],1)); $ rest ='rest _'.strtolower($ _ SERVER ['REQUEST_METHOD']); if(function_exists($ rest))call_user_func($ rest,$ request); ?>`
3> Peter..:
REQUEST METHOD
可以使用以下代码片段来检测所谓的HTTP方法.$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 }
switch
如果你喜欢这个,你也可以使用aif-else
.如果html表单中的方法不是
GET
或POST
需要,则通常使用表单中的隐藏字段来解决.
有关HTTP方法的更多信息,我想参考以下StackOverflow问题:
HTTP协议的PUT和DELETE以及它们在PHP中的用法
由于这是关于REST,仅从服务器获取请求方法是不够的.您还需要接收RESTful路由参数.分离RESTful参数和GET/POST/PUT参数的原因是资源需要有自己唯一的URL用于标识.
这是使用Slim在PHP中实现RESTful路由的一种方法:
https://github.com/codeguy/Slim
$app = new \Slim\Slim(); $app->get('/hello/:name', function ($name) { echo "Hello, $name"; }); $app->run();
并相应地配置服务器.
这是使用AltoRouter的另一个例子:
https://github.com/dannyvankooten/AltoRouter
$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');
我们还可以使用input_filter来检测请求方法,同时还通过输入卫生提供安全性.
$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);
您可以使用getenv
函数,而不必使用$_SERVER
变量:
getenv('REQUEST_METHOD');
更多信息:
http://php.net/manual/en/function.getenv.php
非常简单只需使用$ _SERVER ['REQUEST_METHOD'];
例:
$request = new \Zend\Http\PhpEnvironment\Request(); $httpMethod = $request->getMethod();
通过这种方式,您还可以在zend框架2中实现.谢谢.