$ _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。