$ _REQUEST,$ _GET和$ _POST哪一个是最快的?

哪个代码会更快?

$temp = $_REQUEST['s']; 

要么

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

$_REQUEST默认包含$_GET$_POST$_COOKIE

但它只是一个默认的,这取决于variables_order ; 并不确定你想使用cookie。

如果我不得不select,我可能不会使用$_REQUEST ,我会select$_GET$_POST取决于我的应用程序应该做什么 (即一个或另一个,但不是两个) :一般来说:

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

无论哪种方式,表演的performance都不会有太大的差别:与脚本的其他部分相比,差异可以忽略不计。

GET与POST

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

2)GET和POST都被视为$ _GET和$ _POST。 这些都是超全球化的,这意味着它们总是可以访问的,不pipe范围如何 – 你可以从任何函数,类或文件访问它们,而不必做任何特殊的事情。

3)$ _GET是通过URLparameter passing给当前脚本的variables数组。

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

何时使用GET?

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

GET可能用于发送不敏感的数据。

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

何时使用POST?

使用POST方法从表单发送的信息对其他用户是不可见的(所有名称/值都embedded在HTTP请求的主体中),并且对发送的信息量没有限制。

此外,POST支持高级function,例如在将文件上载到服务器时支持多部分二进制input。

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

$ _GET从查询string或URL中检索variables

$ _POST从POST方法中检索variables,例如(通常)表单。

$ _REQUEST是$ _GET和$ _POST的合并,其中$ _POST覆盖$ _GET。 很好用$ _REQUESTvalidation的自我更新forms。

我build议明确使用$_POST$_GET

无论如何,使用$ _REQUEST对于正确的网站devise来说应该是不必要的,而且还会带来一些不利之处,比如让开放的CSRF/XSS攻击更容易,以及将URL中的数据存储起来。

速度差异应该是最小的任何方式。

使用请求。 没有人关心这种简单操作的速度,而且代码更简洁。

别担心 但是你应该仍然使用第二种解决scheme(加上额外的检查没有现有的variables),因为$_REQUEST存在安全问题(因为$_GET$_POST不是该数组的唯一来源)。

昨天有一个关于$_REQUEST的问题,我相信。 让我去find它。

编辑 :噢,不是直接的post,但这里是无论如何: http : //kuza55.blogspot.com/2006/03/request-variable-fixation.html

$ _GET从查询string或URL中检索variables

$ _POST从POST方法中检索variables,例如(通常)表单。

$ _REQUEST是$ _GET和$ _POST的合并,其中$ _POST覆盖$ _GET。 很好用$ _REQUESTvalidation的自我更新forms。

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

使用它,因为它是安全的,它不会有明显的速度差异

无论速度如何,当您使用$ _GET,$ _ POST或$ _REQUEST检索数据时

但重要的是你不能使用$_GET在某些情况下使用$_POST

什么时候 ??

  • 当你想上传一个文件。
  • 当你不会在url中显示数据。

GET也会限制发送的信息量。 限制约为2000个字符。

其他的事情,当你无法使用$_POST检索数据时,很less有这种情况

什么时候 ?

  • 当数据通过URL传递时。

对于rest服务

 `GET` - Provides a read only access to a resource. `PUT` - Used to create a new resource. 

使用$_REQUEST没有任何问题。

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

我会使用第二种方法,因为它更明确。 否则,你不知道variables来自哪里。

为什么你需要同时检查GET和POST? 当然,使用其中一个只会更有意义。

我只使用_GET或_POST。 我宁愿控制。

我不喜欢OP中的任何一个代码片段,就是放弃了使用HTTP方法的信息。 而且这些信息对于input消毒是重要的。

例如,如果一个脚本从一个将要input到数据库中的表单接受数据,那么这个表单最好使用POST( 仅对于幂等动作使用GET )。 但是,如果脚本通过GET方法接收input数据,那么它应该(通常)被拒绝。 对我来说,这样的情况可能需要写一个违反安全的错误日志,因为这是一个人正在尝试的迹象。

在OP中的任一代码片段,这个消毒是不可能的。

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

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

我用这个,

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

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