php中的$_REQUEST

简介:

这是一个细节,真的很细。

我们查一下php手册,上面会清清楚楚的告诉你,这个变量是"默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。"

原来里面有cookie的内容呀,于是,做了一个测试:

 
 
  1. $_COOKIE['name'] = "aaa"
  2. print_r($_REQUEST); 

输出结果:

 
 
  1. Array ( )  

并没有取到cookie的内容呀,手册写错了?

再看手册,下面有一行:

 
 
  1. 5.3.0 引入 request_order。该指令会影响 $_REQUEST 的内容 

我的php版本是5.3.17,好吧,打开php.ini,找到了这个request_order:

 
 
  1. ; This directive determines which super global data (G,P,C,E & S) should 
  2. ; be registered into the super global array REQUEST. If so, it also determines 
  3. ; the order in which that data is registered. The values for this directive are 
  4. ; specified in the same manner as the variables_order directive, EXCEPT one. 
  5. ; Leaving this value empty will cause PHP to use the value set in the 
  6. ; variables_order directive. It does not mean it will leave the super globals 
  7. ; array REQUEST empty. 
  8. ; Default Value: None 
  9. ; Development Value: "GP" 
  10. ; Production Value: "GP" 
  11. ; http://php.net/request-order 
  12. request_order = "GP" 

翻译一下:

这条指令确定了哪些超全局数据该被注册到超全局数组REQUEST中,这些超全局数据包括G(GET),P(POST),C(COOKIE),E(ENV),S(SERVER)。这条指令同样指定了这些数据的注册顺序,换句话说GP和PG是不一样的。注册的顺序是从左至右,即右侧的值会覆盖左侧的。比如,当设置为GPC时,COOKIE > POST > GET,依次覆盖。如果这个项被设置为空,php将会使用指令variables_order的值来指定。

如果将php.ini中的request_order设置为"GPC"后,运行下面的程序post.php来看一下结果吧:

 
 
  1. <?php 
  2. error_reporting(0); 
  3. setcookie("value""cookie", time()+3600); 
  4. echo "===GET===<br />"
  5. echo $_GET['value'] . "<br />"
  6. echo "===POST===<br />"
  7. echo $_POST['value'] . "<br />"
  8. echo "===COOKIE===<br />"
  9. echo $_COOKIE['value'] . "<br />"
  10. echo "===REQUEST===<br />"
  11. echo $_REQUEST['value'] . "<br />"
  12. ?> 
  13. <form method="post" action="?value=get"
  14.     <input type="text" name="value" value="post"/> 
  15.     <input type="submit" value="submit"/> 
  16. </form> 

点了提交按钮后会出现下面的结果:

 
 
  1. ===GET=== 
  2. get 
  3. ===POST=== 
  4. post 
  5. ===COOKIE=== 
  6. cookie 
  7. ===REQUEST=== 
  8. cookie 

可以看到cookie的值被取到了。为了使程序兼容更多的版本,不要在程序中使用$_REQUEST这个超全局变量。当我们的程序确实需要接收get和post过来的参数时,我们可以用下面的方法来代替:

 
 
  1. $_REQ = array_merge($_GET$_POST); 

完整的程序如下:

 
 
  1. <?php 
  2. error_reporting(0); 
  3. setcookie("value""cookie", time()+3600); 
  4.  
  5. $_REQ = array_merge($_GET$_POST); 
  6.  
  7. echo "===GET===<br />"
  8. echo $_GET['value'] . "<br />"
  9. echo "===POST===<br />"
  10. echo $_POST['value'] . "<br />"
  11. echo "===COOKIE===<br />"
  12. echo $_COOKIE['value'] . "<br />"
  13. echo "===REQUEST===<br />"
  14. echo $_REQ['value'] . "<br />"
  15. ?> 
  16. <form method="post" action="?value=get"
  17.     <input type="text" name="value" value="post"/> 
  18.     <input type="submit" value="submit"/> 
  19. </form> 

当点击提交后,输出结果如下:

 
 
  1. ===GET=== 
  2. get 
  3. ===POST=== 
  4. post 
  5. ===COOKIE=== 
  6. cookie 
  7. ===REQUEST=== 
  8. post 

另外,要判断用户到底是post还是get请求的页面,最好是用

 
 
  1. $_SERVER['REQUEST_METHOD'] 

来判断。










本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1043604,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
|
6月前
|
应用服务中间件 Linux 网络安全
PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
在Azure App Service for Linux上部署的PHP应用遇到上传文件超过1MB时出现413 Request Entity Too Large错误的解决之法
225 0
|
PHP
PHP $_REQUEST
PHP $_REQUEST
44 0
|
PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
php中$_REQUEST、$_POST、$_GET的区别和联系小结 作者: 字体:[增加 减小] 类型:转载   php中有$_request与$_post、$_get用于接受表单数据,当时他们有何种区别,什么时候用那种最好。
872 0
|
PHP
PHP中全局变量$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的关系和区别 (转载)
原文地址找不到了 sorry $_REQUEST、 $_GET、 $_POST、 $_COOKIE  的关系和区别:1.关系:$_REQUEST包含了$_GET、$_POST、$_COOKIE的所有内容,是它们的集合体。
1060 0
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
3月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
148 9