在$ _REQUEST,$ _GET和$ _POST中哪一个最快?

时间:2009-12-17 22:08:13

标签: php

哪些代码会更快?

$temp = $_REQUEST['s'];

if (isset($_GET['s'])) {
  $temp = $_GET['s'];
}
else {
  $temp = $_POST['s'];
}

15 个答案:

答案 0 :(得分:262)

默认情况下,

$_REQUEST包含$_GET$_POST$_COOKIE的内容。

但它只是默认值,取决于variables_order;并且不确定你是否想要使用cookies。

如果我必须选择,我可能不会使用$_REQUEST,我会选择$_GET$_POST - ,具体取决于我的申请应该做什么 (即一个或另一个,但不是两个):一般来说:

  • 当有人向您的应用程序请求数据时,您应该使用$_GET
  • 当有人将(插入或更新;或删除)数据推送到您的应用时,您应该使用$_POST

无论哪种方式,表演都没有太大区别:与你的其他剧本相比,差异可以忽略不计。

答案 1 :(得分:31)

GET与POST

1)GET和POST都创建一个数组(例如array(key => value,key2 => value2,key3 => value3,...))。此数组包含键/值对,其中键是表单控件的名称,值是来自用户的输入数据。

2)GET和POST都被视为$ _GET和$ _POST。这些是超级全局,这意味着它们始终可以访问,无论范围如何 - 您可以从任何函数,类或文件访问它们,而无需执行任何特殊操作。

3)$ _GET是通过URL参数传递给当前脚本的变量数组。

4)$ _POST是通过HTTP POST方法传递给当前脚本的变量数组。

何时使用GET?

每个人都可以看到从具有GET方法的表单发送的信息(所有变量名称和值都显示在URL中)。 GET还对要发送的信息量有限制。限制大约是2000个字符。但是,由于变量显示在URL中,因此可以为页面添加书签。这在某些情况下很有用。

GET可用于发送非敏感数据。

注意:绝不应将GET用于发送密码或其他敏感信息!

何时使用POST?

使用POST方法从表单发送的信息对其他人不可见(所有名称/值都嵌入在HTTP请求的正文中),并且对要发送的信息量没有限制。

此外,POST支持高级功能,例如在将文件上传到服务器时支持多部分二进制输入。

但是,由于变量未显示在URL中,因此无法为页面添加书签。

答案 2 :(得分:21)

  

$ _ GET从查询字符串或您的网址中检索变量。>

     

$ _ POST从POST方法中检索变量,例如(通常)表单。

     

$ _ REQUEST是$ _GET和$ _POST的合并,其中$ _POST会覆盖$ _GET。很高兴在自我验证表格上使用$ _REQUEST进行验证。

答案 3 :(得分:17)

我建议明确使用$_POST$_GET

无论如何,在正确的网站设计中使用$ _REQUEST应该是不必要的,并且它带来一些缺点,例如让您更容易CSRF/XSS攻击以及在URL中存储数据所带来的其他愚蠢。

速度差异应该是最小的。

答案 4 :(得分:8)

使用REQUEST。没有人关心这种简单操作的速度,而且代码更清晰。

答案 5 :(得分:7)

别担心。但是你仍然应该使用第二个解决方案(加上对这些变量都不存在的额外检查),因为$_REQUEST存在安全问题(因为$_GET$_POST不是唯一的该数组的来源)。

我相信昨天有一篇关于$_REQUEST的问题的帖子。让我去找吧。

编辑:哦,好吧,不是直接发帖,但无论如何都是这样:http://kuza55.blogspot.com/2006/03/request-variable-fixation.html

答案 6 :(得分:4)

if (isset($_GET['s'])) {
  $temp = $_GET['s'];
}
else {
  $temp = $_POST['s'];
}

使用它,因为它更安全,并且不会产生明显的速度差异

答案 7 :(得分:4)

$ _ GET从查询字符串或您的网址中检索变量。>

$ _ POST从POST方法中检索变量,例如(通常)表单。

$ _ REQUEST是$ _GET和$ _POST的合并,其中$ _POST会覆盖$ _GET。很高兴在自我验证表格上使用$ _REQUEST进行验证。

答案 8 :(得分:2)

使用$ _GET,$ _ POST或$ _REQUEST

检索数据时无论速度如何

但问题是,在某些情况下,您无法使用$_GET替代$_POST

什么时候?

  • 当您要上传文件时。
  • 当你不这样做时,不会在网址中显示数据。

GET对发送的信息量也有限制。限制大约是2000个字符。

如果您无法使用$_POST

检索数据,则很少有其他情况

什么时候?

  • 在URL中传递数据时。

休息服务

`GET` - Provides a read only access to a resource.

`PUT` - Used to create a new resource.

使用$_REQUEST没有错。

但是这样做的方法是明确检查$ _SERVER ['REQUEST_METHOD'],而不是依赖于$ _POST为GET为空。​​

答案 9 :(得分:1)

我会使用第二种方法,因为它更明确。否则你不知道变量的来源。

为什么你还需要检查GET和POST?当然使用其中一种只是更有意义。

答案 10 :(得分:1)

我只使用_GET或_POST。我更喜欢控制。

我不喜欢OP中的任何一个代码片段,它们丢弃了使用哪种HTTP方法的信息。这些信息对于输入清理非常重要。

例如,如果脚本接受将要输入到数据库中的表单中的数据,那么表单最好使用POST(use GET only for idempotent actions)。但是如果脚本通过GET方法接收输入数据,则应该(通常)拒绝它。对我来说,这种情况可能需要在错误日志中写入安全违规,因为这是某人正在尝试某些事情的标志。

使用OP中的任一代码片段,都不可能进行此清理。

答案 11 :(得分:1)

我会使用$_POST$_GET,因为与$_REQUEST不同,他们的内容不受variables_order的影响。
何时使用$_POST$_GET取决于正在执行的操作类型。更改从服务器处理的数据的操作应通过POST请求完成,而其他操作应通过GET请求完成。举个例子,在用户点击链接后不应该直接执行删除用户帐户的操作,而可以通过链接查看图像。

答案 12 :(得分:1)

我用这个,

$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;

语句验证$ _REQUEST是否有多个参数($ _REQUEST中的第一个参数是请求uri,可以在需要时使用, 一些PHP包不会返回$ _GET,所以检查它是否超过1是$ _GET,默认情况下,它是$ _POST。

答案 13 :(得分:0)

您过早地进行了优化。另外,出于安全考虑,你应该考虑是否应该将GET用于你正在发布的内容。

答案 14 :(得分:0)

这很丑陋,我不建议将其作为实时解决方案的最终解决方案,但是在构建其余函数时,有时可以使用“ catch-all”参数捕获器:

public static function parseParams() {
    $params = array();
    switch($_SERVER['REQUEST_METHOD']) {
        case "PUT":
        case "DELETE":
            parse_str(file_get_contents('php://input'), $params);
            $GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
            break;
        case "GET":
            $params = $_GET;
            break;
        case "POST":
            $params = $_POST;
            break;
        default:
            $params = $_REQUEST;
            break;
    }
    return $params;
}

某些广告素材可能甚至可以添加到其中以处理命令行参数或来自IDE的任何内容。一旦确定了给定的休息功能在做什么,就可以为该给定的调用选择一个合适的功能,以确保获得所需的部署版本。 假定已设置“ REQUEST_METHOD”。