资讯专栏INFORMATION COLUMN

$_REQUEST 详解

fai1017 / 4512人阅读

摘要:设置为,那么将不会创建超全局变量。如果设置为空,则填充的顺序会以配置项中的顺序为准。例如,设置为时,代表将包含和的值,并且当和中的键相同时,的值将覆盖的值。结论的值与中的配置相关。推荐在项目中尽量不要使用,而是明确的从,,中取值。

前言

在平时的开发中,我们可能会遇到以下问题:

通过 $_REQUEST 得到值怎么和与 $_GET 获取到的不同?

$_SERVER 的值怎么是空的?

能通过 $_REQUEST 获取到 cookie 值吗?

要想回答这几个问题,我们就需要详细了解一下 $_REQUEST 。

PHP 相关配置

首先来看看 PHP 配置文件 php.ini 中的相关配置:

; This directive determines which super global arrays are registered when PHP
; starts up. G,P,C,E & S are abbreviations for the following respective super
; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty
; paid for the registration of these arrays and because ENV is not as commonly
; used as the others, ENV is not recommended on productions servers. You
; can still get access to the environment variables through getenv() should you
; need to.
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS";
; http://php.net/variables-order
variables_order = "GPCS"

variables_order:这个配置项设置在 PHP 脚本启动时,要注册 EGPCS ($_ENV, $_GET,$_POST,$COOKIE,$_SERVER) 中哪几个超全局变量。

例如,如果设置 variables_order = "SP",那么 PHP 将创建超全局变量 $_SERVER 和 $_POST,但是不会创建 $_ENV, $_GET 和 $_COOKIE。设置为 "",那么将不会创建超全局变量。

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

request_order:这个配置项设置 PHP 将 GET, POST 和 Cookie 中的哪些添加到 $_REQUEST 中,并且指定了填充时的顺序。如果 request_order 设置为空,则填充的顺序会以 variables_order 配置项中的顺序为准。

例如,设置为 request_order = "GP" 时,代表 $_REQUEST 将包含 $_GET 和 $_POST 的值,并且当 $_GET 和 $_POST 中的键相同时,$_POST的值将覆盖 $_GET 的值。

结论

$_REQUEST 的值与 php.ini 中的配置相关。推荐在项目中尽量不要使用 $_REQUEST,而是明确的从 $_GET,$_POST,$COOKIE 中取值。

参考资料

1、http://php.net/variables-order
2、http://php.net/request-order
3、https://github.com/php/php-src/blob/master/php.ini-production#L594-L61...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30265.html

相关文章

  • ThinkPHP5之 _initialize() 初始化方法详解

    摘要:延伸如果子类继承了父类后,重写了构造方法,注意调用父类的哦,否则是使用不了的,代码如下其他代码总结一个简单的小设计,这里抛砖引玉的分析下,希望对大家有帮助。 前言 _initialize() 这个方法在官方手册里是这样说的: 如果你的控制器类继承了 hinkController类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。 其实不止5,在之前...

    Jinkey 评论0 收藏0
  • PHP 的 $_SERVER详解

    摘要:导语是预定义的超全局变量。测试是在下进行的,环境为,访问域名为,文件目录在。上下文有安全性要求的环境里,不应该依赖此值。在实际工作中,有很多作用,这里只举两个简单实例,获取当前请求以及简单防盗链当前是否为协议,前一页面的参考资料手册消息头 导语 $_SERVER 是PHP预定义的超全局变量。所谓超全局变量,即在脚本全部作用域中都可以使用,$_SERVER保存关于报头、路径和脚本位置的信...

    worldligang 评论0 收藏0
  • PHP 的 $_SERVER详解

    摘要:导语是预定义的超全局变量。测试是在下进行的,环境为,访问域名为,文件目录在。上下文有安全性要求的环境里,不应该依赖此值。在实际工作中,有很多作用,这里只举两个简单实例,获取当前请求以及简单防盗链当前是否为协议,前一页面的参考资料手册消息头 导语 $_SERVER 是PHP预定义的超全局变量。所谓超全局变量,即在脚本全部作用域中都可以使用,$_SERVER保存关于报头、路径和脚本位置的信...

    seanlook 评论0 收藏0
  • flask如何开启多线程详解

    摘要:在我之前写的中源码的深究和理解一文中解释了如何支持多线程主要通过两个类来实现和在中有两个属性和后者用来获取线程从而区分不同线程发来的请求这次要说的是如何开启多线程先从这个方法看起会进入这个函数经过判断和设置后进入这个函数看下源码 在我之前写的《flask中current_app、g、request、session源码的深究和理解》一文中解释了flask如何支持多线程主要通过两个类来实现...

    Yangder 评论0 收藏0
  • 干货!flask登录注册token验证接口开发详解

    今天给大家献上登录注册接口开发,是基于token验证的。咱们闲言少叙,进入正题! 首先看一下数据库模型: #pip install passlib from passlib.apps import custom_app_context as pwd_context class Shop_list(db.Model): __tablename__ = shop_list userNa...

    yimo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<