美文网首页PHP实战
PHP 扩展 - 获取 $_SERVER 变量的小坑

PHP 扩展 - 获取 $_SERVER 变量的小坑

作者: Bun_Wong | 来源:发表于2016-07-12 16:24 被阅读404次

之前说过获取 $_SERVER 全局变量可以用

zval *server;
server = &PG(http_globals)[TRACK_VARS_SERVER];

来获取,之前开发环境都是 Apache 并没有发现什么问题,然而今天在 Nginx 服务器下测试,结果是 server 指针获取到的 zval 类型为 IS_UNDEF(就是说 $_SERVER 是存在,但是还没有赋值),翻了一下鸟哥的代码,找到下面这段

if (PG(auto_globals_jit)) {
    zend_string *server_str = zend_string_init(ZEND_STRL("_SERVER"), 0);
    zend_is_auto_global(server_str);
    zend_string_release(server_str);
}

除 $_GET、$_POST、$_FILES、$_COOKIE 外,对于 $_SERVER、$_ENV、$_REQUEST 这三个全局变量,都需要先执行 zend_is_auto_global 方法已确保自动赋值完成。

==========

写在之后,原来网上的牛人已经有过踩坑经历:http://blog.csdn.net/linkaisheng101990/article/details/46380673,后知后觉啊

相关文章

  • PHP 扩展 - 获取 $_SERVER 变量的小坑

    之前说过获取 $_SERVER 全局变量可以用 来获取,之前开发环境都是 Apache 并没有发现什么问题,然而今...

  • php.ini中的cgi.fix_pathinfo选项

    PHP里经常要获取当前请求的URL路径信息。一般可以通过环境变量$_SERVER[‘PATH_INFO’]获取,而...

  • PHP 扩展与 ZEND 引擎的整合

    PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息...

  • PHP 表单验证

    什么是 $_SERVER["PHP_SELF"] 变量? $_SERVER["PHP_SELF"] 是一种超全局变...

  • PHP5.3+连接SQL Sever

    php5.2.x自带php_mssql.dll的扩展连接SQL Server,但这个扩展只能支持SQL Serve...

  • PHP 扩展 - 获取当前请求 IP 地址

    在 PHP 中获取 IP 地址通常都是来自 $_SERVER 全局变量中,比如 也有可能在被前端 Web serv...

  • php socket

    PHP也可以使用socket,先开启socket扩展。 /** *File name server.php *服务...

  • Linux/CentOS 7环境安装禅道

    安装httpd(Apache HTTP Server) 安装PHP和扩展 修改PHP配置文件,启用session保...

  • php扩展开发

    扩展入口相关函数 变量定义 php代码 扩展写法 MAKE_STD_ZVAL展开 定义一个数组 php代码 扩展代...

  • php 连接 SQLServer

    PHP自带的MSSQL扩展php_mssql.dll是给SQL Server 2000用的,连接不上2008?! ...

网友评论

    本文标题:PHP 扩展 - 获取 $_SERVER 变量的小坑

    本文链接:https://www.haomeiwen.com/subject/ygqsjttx.html