哪些代码会更快?
$temp = $_REQUEST['s'];
或
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
答案 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
什么时候?
休息服务
`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”。