作者:zhanhailiang 日期:2013-01-18
今天整理代码想使用$GLOBALS['_SERVER']来替代$_SERVER来访问相关的环境变量,总是会报“_SERVER undefined”错误。如下用例:
用例1:
<?php
print_r($GLOBALS);
此时输出中并没有_SERVER相关信息:
Array
(
[GLOBALS] => Array
*RECURSION*
[_POST] => Array
(
)
[_GET] => Array
(
)
[_COOKIE] => Array
(
)
[_FILES] => Array
(
)
)
用例2:
<?php
print_r($GLOBALS);
print_r($_SERVER);
此时输出中含有_SERVER相关信息:
Array
(
[GLOBALS] => Array
*RECURSION*
[_POST] => Array
(
)
[_GET] => Array
(
)
[_COOKIE] => Array
(
)
[_FILES] => Array
(
)
[_SERVER] => Array
(
)
)
查了下PHP手册关于$GLOBALS描述,引用therandshow
at gmail dot com的评论:
therandshow at gmail dot com
As ofPHP5.4 $GLOBALS is now initialized just-in-time.
This means there now is an advantage to not usethe $GLOBALS variable as you can avoid the overhead of initializing it. How much of an advantage that isI'm not sure, but I've never liked $GLOBALS much anyways.
追根数源,发现PHP5Changelog更新日志的描述:
Unordered List ItemImproved Zend Engine, performance tweaks and optimizations
Unordered List ItemChanged $GLOBALS into a JIT autoglobal, so it's initialized only if used. (this may affect opcode caches!)
718 ; When enabled, the SERVER and ENV variables are created when they're first
719 ; used (Just In Time) instead of when the script starts. If these variables
720 ; are not used within a script, having this directive on will result in a
721 ; performance gain. The PHP directives register_globals, register_long_arrays,
722 ; and register_argc_argv must be disabled for this directive to have any affect.
723 ; http://php.net/auto-globals-jit
724 auto_globals_jit = On
终于弄明白了,PHP5+中在开启auto_globals_jit = On情况下,$_SERVER变量和$_ENV变量不会在脚本启动时就创建,而是会在第一次使用$SERVER和$ENV时才会创建。所以就会出现上述两个用例的情况。
备注:
实测结论:
auto_globals_jit setting is also affecting $_REQUEST superglobal in 5.3 It is not explicitly stated in documentation.
至少5.3.13版本中开启auto_globals_jit = On情况下,$_REQUEST也只会在第一次使用时才会创建。
分享到:
相关推荐
然而,当我们需要在函数内部使用全局变量时,有两种方式可以实现:`global`关键字和`$GLOBALS`数组。虽然两者都能访问全局变量,但它们在用法和效果上有所不同。 首先,`global`关键字是用来在函数内部引用全局变量...
在PHP编程语言中,`global`关键字和`$GLOBALS`数组是两个与全局变量相关的概念,它们虽然都与全局变量打交道,但在使用上有所区别。本文将继续深入分析这两个概念。 首先,`global`关键字用于在函数内部访问和操作...
在PHP编程中,HTTP请求方式主要有GET和POST,而在处理POST数据时,开发者可能会遇到两种全局变量:`$_POST`和`$GLOBALS['HTTP_RAW_POST_DATA']`。这两个变量都与HTTP POST请求中的数据有关,但它们在使用场景和功能...
PHP中$GLOBALS和global都可以实现全局变量的功能,所以很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。$GLOBALS 是一个超级全局变量,其实是一个数组,而global 则是一个声明全局变量的关键字! 一、...
5、应用TAB三种样式任君选择,卡片、列表、大图; 6、应用直连/内页,两种跳转模式自由切换; 7、网址直连/内页,两种跳转模式自由切换; 8、所有模块均自带独立广告位,变现能力拉满; 9、适配谷歌浏览器沉浸式...
echo $GLOBALS['a'] + $GLOBALS['b']; // 输出3 } ``` 在这个例子中,我们通过$GLOBAL数组访问全局变量$a和$b,并输出它们的和。 #### 示例2:$GLOBALS数组与global关键字等价 ```php <?php $a = 1; test ...
总结,理解和正确使用`global`关键字以及`$GLOBALS`数组是PHP编程中重要的概念,它们在处理全局变量时提供了灵活性,但过度依赖全局变量可能会导致代码难以维护和调试。因此,建议尽量减少全局变量的使用,提高代码...
在上面的示例中,我们创建了两个全局变量$x和$y,并在函数`addition()`内部使用$GLOBALS数组来访问并计算它们的和,然后将结果存储回$z。这样,即使在函数内部,我们也能修改或读取全局变量的值。这种方法在处理跨...
### WindowsXP + IIS + PHP5 + MySQL5 + Zend + GD库 + phpMyAdmin + PHPWind 5.3 安装教程精要 #### 一、准备工作与环境搭建 在开始构建一个完整的Web开发环境之前,确保你的电脑上已经安装好了Windows XP操作...
$GLOBALS['GLOBALS']['PSET']['metacon']=$GLOBALS["CONF"]["memo"]; $GLOBALS['GLOBALS']['PSET']['metakey'] =$GLOBALS["CONF"]["keywords"]; $GLOBALS['GLOBALS']['PSET']['pagetitle'] =$GLOBALS["CONF"][...
这在开发模块化应用时非常有用,可以帮助我们按需引入不同的功能模块。然而,如果在多个文件中连续使用`include`,而最后引入的文件中的函数又想通过`global`关键字引用之前定义的全局变量时,可能会遇到变量值为`...
主要介绍了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别,结合具体实例形式分析了$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的功能与使用过程中的区别,需要的朋友可以参考下
官网下载版本提供了完整版和核心版两个版本,核心版本只保留了核心类库和必须的文件,去掉了所有的扩展类库和驱动,支持标准模式和SAE模式。3.2版本也支持composer安装,确保你的电脑已经安装了composer。
在PHP中,全局变量的使用是经常出现的一个话题,尤其是涉及到在函数内部访问或者修改全局作用域中定义的变量时,开发者通常需要使用global关键字或者访问一个特殊的全局数组$GLOBALS。标题中提到的“global和$...
通过宝塔或者phpstudy建立站点,将程序解压后上传至站点根目录,浏览器打开站点网址进行初始化设置。 初始管理员用户名和密码为安装时设定的! 如需重新安装系统,请删除install目录下的install.lock文件,重新...