当前位置:  开发笔记 > 编程语言 > 正文

在PHP中检测请求类型(GET,POST,PUT或DELETE)

如何解决《在PHP中检测请求类型(GET,POST,PUT或DELETE)》经验,为你挑选了8个好方法。

如何在PHP中检测使用了哪种请求类型(GET,POST,PUT或DELETE)?



1> gnud..:

通过使用

$_SERVER['REQUEST_METHOD']

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     // The request is using the POST method
}

有关更多详细信息,请参阅$ _SERVER变量的文档.


+ 1 - 当有疑问时,var_dump($ _ SERVER)和答案通常在于.
没错,但谷歌搜索没有出现任何结果,现在在一两天之内就会出现.;)
@NathanLong根据我的经验,这是不正确的.如果你发布到mypage.php?var = something,那么'something'将出现在`$ _GET ['var']`中.
不幸的是,`$ _POST`和`$ _GET`名字有些不幸.无论HTTP方法如何,`$ _GET`都包含来自URL查询组件的变量.如果请求是作为`application/x-www-form-urlencoded`发送的,`$ _POST`将包含表单字段.
如果您发布到mypage.php会发生什么?var = something?
该方法将是POST,但如果您必须使用$ _GET来获取这些变量我不确定.
在nickf提到的情况下,您也可以(可能)使用$ _REQUEST变量.$ _REQUEST包含post,get和cookie值.阅读http://php.net/manual/en/reserved.variables.request.php上的文档

2> neu242..:

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如果你喜欢这个,你也可以使用a if-else.

如果html表单中的方法不是GETPOST需要,则通常使用表单中的隐藏字段来解决.


有关HTTP方法的更多信息,我想参考以下StackOverflow问题:

HTTP协议的PUT和DELETE以及它们在PHP中的用法



4> nurettin..:

由于这是关于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');



5> HelpNeeder..:

我们还可以使用input_filter来检测请求方法,同时还通过输入卫生提供安全性.

$request = filter_input(INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_ENCODED);



6> Artegon..:

您可以使用getenv函数,而不必使用$_SERVER变量:

getenv('REQUEST_METHOD');

更多信息:

http://php.net/manual/en/function.getenv.php



7> Juned Ansari..:

非常简单只需使用$ _SERVER ['REQUEST_METHOD'];

例:




8> Amit Patange..:
$request = new \Zend\Http\PhpEnvironment\Request();
$httpMethod = $request->getMethod();

通过这种方式,您还可以在zend框架2中实现.谢谢.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有