这些代码中哪一个更快?
$temp = $_REQUEST['s'];
或者
if (isset($_GET['s'])) { $temp = $_GET['s']; } else { $temp = $_POST['s']; }
没有人关心这样一个简单操作的速度,而且它的代码更简洁。
我会使用第二种方法,因为它更加明确。否则你就不知道变量是从哪里来的。
为什么需要同时检查 GET 和 POST 呢?当然,使用其中一种只会更有意义。
默认情况下,$_REQUEST 包含 $_GET、 $_POST和 $_COOKIE的内容。
$_REQUEST
$_GET
$_POST
$_COOKIE
但是它只是一个默认值,这取决于 variables_order; 并且不确定您是否希望使用 cookie。
variables_order
如果我必须选择,我可能不会使用 $_REQUEST,我会选择 $_GET或者 $_POST—— 取决于我的应用程序应该做什么 (即一个或另一个,但不是两个): 一般来说:
无论哪种方式,在表演上都不会有太大的差别: 与剧本的其他部分相比,这种差别可以忽略不计。
别担心。但是您仍然应该使用第二种解决方案(另外还要额外检查是否存在这些变量) ,因为 $_REQUEST存在安全问题(因为 $_GET和 $_POST不是该数组的唯一来源)。
我相信昨天有一篇关于 $_REQUEST问题的帖子,让我去找找看。
编辑 : 哦,好吧,不是直接的一篇文章,但无论如何它是这样的: 一个 href = “ http://kuza55.blogspot.com/2006/03/request-variable-fixation.html”rel = “ noReferrer”> http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
我建议明确地使用 $_POST和 $_GET。
使用 $_ REQUEST 对于正确的站点设计来说应该是没有必要的,而且它还有一些缺点,比如让您更容易受到 CSRF/XSS攻击,以及在 URL 中存储数据带来的其他愚蠢行为。
CSRF/XSS
不管怎样,速度差应该是最小的。
你过早地优化了。另外,出于安全考虑,您应该认真考虑是否应该将 GET 用于您正在发布的内容。
我只使用 _ GET 或 _ POST。我更喜欢有控制权。
我不喜欢 OP 中任何一个代码片段的原因是它们丢弃了使用 HTTP 方法的信息。这些信息对于输入消毒非常重要。
例如,如果脚本接受将要输入数据库的表单中的数据,那么表单最好使用 POST (仅对幂等动作使用 GET)。但是如果脚本通过 GET 方法接收输入数据,那么它应该(通常)被拒绝。对于我来说,这种情况可能需要在错误日志中写入一个安全冲突,因为这是某人正在尝试某事的信号。
对于 OP 中的任何一个代码片段,这种净化都是不可能的。
使用它,因为它是安全的,它不会使明显的速度差异
我会使用 $_POST和 $_GET,因为不同于 $_REQUEST,它们的内容不受 variables_order的影响。 何时使用 $_POST和 $_GET取决于正在执行的操作类型。更改从服务器处理的数据的操作应该通过 POST 请求完成,而其他操作应该通过 GET 请求完成。例如,当用户点击链接后,删除用户帐户的操作不应该直接执行,而查看图像可以通过链接完成。
$_ GET 从 querystring 或 URL 检索变量。 > $_ POST 从 POST 方法检索变量,例如(通常)表单。 $_ REQUEST 是 $_ GET 和 $_ POST 的合并,其中 $_ POST 覆盖 $_ GET。在自引用表单上使用 $_ REQUEST 进行验证很好。
$_ GET 从 querystring 或 URL 检索变量。 >
$_ POST 从 POST 方法检索变量,例如(通常)表单。
$_ REQUEST 是 $_ GET 和 $_ POST 的合并,其中 $_ POST 覆盖 $_ GET。在自引用表单上使用 $_ REQUEST 进行验证很好。
获取与发布
1) GET 和 POST 都创建一个数组(例如 array (key = > value,key2 = > value2,key3 = > value3,...))。该数组保存键/值对,其中键是表单控件的名称,值是来自用户的输入数据。
2) GET 和 POST 都被视为 $_ GET 和 $_ POST。它们是超全局变量,这意味着它们总是可访问的,不管作用域是什么——您可以从任何函数、类或文件访问它们,而不必做任何特殊的操作。
$_ GET 是通过 URL 参数传递给当前脚本的变量数组。
$_ POST 是通过 HTTP POST 方法传递给当前脚本的变量数组。
何时使用 GET?
使用 GET 方法从表单发送的信息对每个人都是可见的(所有变量名和值都显示在 URL 中)。GET 还对要发送的信息量有限制。限制是大约2000个字符。但是,由于变量显示在 URL 中,因此可以将页面加入书签。这在某些情况下很有用。
GET 可用于发送非敏感数据。
注意: GET 不应该用于发送密码或其他敏感信息!
何时使用 POST?
使用 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值都嵌入在 HTTP 请求体中) ,并且对要发送的信息量没有限制。
此外,POST 还支持高级功能,比如在将文件上传到服务器时支持多部分二进制输入。
但是,由于变量没有显示在 URL 中,因此不可能将页面加入书签。
黑客可以设置一个 cookie 来覆盖 $_ POST 或 $_ GET 值,这涉及到一些安全问题。如果处理敏感数据,我不建议使用 $_ REQUEST。山多
在某些情况下,你不能使用 $_GET替代 $_POST。
什么时候?
GET还对要发送的信息量有限制,限制是大约2000个字符。
GET
另外,很少有情况下不能使用 $_POST检索数据
休息服务
`GET` - Provides a read only access to a resource. `PUT` - Used to create a new resource.
使用 $_REQUEST没有错。
但是这样做的方法是显式地检查 $_ SERVER [‘ REQUEST _ 方法’] ,而不是依赖于 $_ POST 对于 GET 是空的。
我用这个,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
语句验证 $_ REQUEST 是否有多个参数($_ REQUEST 中的第一个参数将是当需要时可以使用的 REQUEST uri, 一些 PHP 程序包不会返回 $_ GET,所以检查它是否超过1,默认情况下,它将是 $_ POST。
它很难看,我不建议在推送代码时使用它作为最终解决方案,但是在构建 rest 函数时,有时候使用一个“万能”参数捕获器会很方便:
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 的任何东西。一旦决定了给定的 rest-function 正在做什么,就可以选择一个适合该给定调用的函数,以确保获得部署版本所需的内容。 这假设设置了“ REQUEST _ Method”。