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

之前说过获取 $_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,后知后觉啊

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容