如何用好PHP $_REQUEST数组?php $_REQUEST取值方式区别

发布时间:2021-01-17编辑:脚本学堂
有关PHP $_REQUEST数组的用法,为什么不建议使用$_request来获取数据,并介绍了php中$_REQUEST、$_POST、$_GET用法的区别,供大家学习参考。

在以前的php编程中,喜欢用$_REQUEST这个数组,而且想用GET时候就用GET直接测试即可。还可以把URL打出来,很是方便。

从而很少用$_GET和$_POST超全局变量
 
这里介绍下为何不应该使用$_REQUEST这个数组。
 
处理表单数据,可以使用PHP的$_GET和$_POST这两个超全局变量,具体是哪个由form表单提交时的method指定。

除此之外,PHP供了$_REQUEST数组。但是其不仅包含$_GET和$_POST的所有数据元素,同时其还会包含$_COOKIE这个超全局数 组的所有数据元素。
 
如果这三个数组里面的key相同,那么我用$_REQUEST得到的到底是哪个数组的值呢?会不会有什么问题?

这里不对$_COOKIE进行设置,自行处理:
 
例子:
 

复制代码 代码示例:
<?php 
var_dump($_GET['a'],$_POST['a'],$_REQUEST['a']); 
?> 
<html> 
<head><title>demo</title></head> 
<body> 
<form method= 'post' action = 'req.php?a=xxx'> 
<input type='hidden' name='a' value='yyy'/> 
<input type='submit' name='submit' value='submit'/> 
</form> 
</body> 
</html> 
 

 
当提交表单时,获取的页面内容为:
 

string(3) "xxx" string(3) "yyy" string(3) "yyy" 
 

 
同样的内容,在$_REQUEST里面,POST的值覆盖了GET的值,这到底是怎么回事呢?
 
php.ini配置文件,在第466行左右有如下内容:
; This directive describes the order in which PHP registers GET, POST, Cookie, 
; Environment and Built-in variables (G, P, C, E & S respectively, often 
; referred to as EGPCS or GPC).  Registration is done from left to right, newer 
; values override older values. 
variables_order = "EGPCS" 
 
这个EGPCS就是说明用$_REQUEST数组获取内容的优先级,其字母的含义分别代表为:E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SESSION。后面出现的数据会覆盖前面写入的数据,其默认的数据写入方式就是EGPCS ,所以POST包含的数据将覆盖GET中使用相同关键字的数据。
 
所以为了避免此问题,我们应该明确的使用$_GET和$_POST全局变量,在要用到$_REQUEST 的时候想一下,是不是真的需要用$_REQUEST,为什么提交的方式不是固定的,这样设计程序是否有问题?是否是设计过度,也许我们为了可扩展性却导致 了意想不到的问题发生,这显然是不值得的,而且提交方式只能有一种,为什么要考虑两种情况呢?
 
两个建议:
 
1. 尽量不要设置全域的cookie,如果不是必须的话
2. 建议不使用Request 方法来获取变量。

二、php中$_REQUEST、$_POST、$_GET区别

php中有$_request与$_post、$_get用于接受表单数据,它们有哪些区别,什么时候用那种最好。

1. $_REQUEST

php中$_REQUEST可以获取以POST方法和GET方法提交的数据,但是速度比较慢。

2. $_GET

用来获取由浏览器通过GET方法提交的数据。
GET方法他是通过把参数数据加在提交表单的action属性所指的URL中,值和表单内每个字段一一对应,然后在URL中可以看到,缺点:

1、安全性不好,在URL中可以看得到

2、传送数据量较小,不能大于2KB。

3、$_POST
用来获取由浏览器通过POST方法提交的数据。POST方法他是通过HTTP POST机制,将表单的各个字段放置在HTTP HEADER内一起传送到action属性所指的url地址中,用户看不到这个过程。他提交的大小一般来说不受限制,但是具体根据服务器的不同,还是略有不同。相对于_GET方式安全性略高

4、$_REQUEST、$_POST、$_GET 的区别和联系
$_REQUEST["参数"]具用$_POST["参数"] $_GET["参数"]的功能,但是$_REQUEST["参数"]比较慢。
通过post和get方法提交的所有数据都可以通过$_REQUEST数组["参数"]获得