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,后知后觉啊

你可能感兴趣的:(PHP 扩展 - 获取 $_SERVER 变量的小坑)