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

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,337评论 19 139
  • ##第一节:环境搭建 编译安装的关键点:配置编译安装环境,build-essential环境。 1.1 准备编译环...
    你很闹i阅读 3,663评论 1 2
  • PHP 为所有脚本提供了大量的预定义变量(predefined variables)。 这些变量包括了以下这些东西...
    咚门阅读 4,910评论 1 4
  • 今天,提取项目,记录一下cocopod的流程 a 新建一个项目 b 终端中,cd到项目总目录 c 建立Podfil...
    未知的远方阅读 4,502评论 0 2
  • 最近在微信上看到了文字云,逼格满满,就收藏了网站,花了些时间研究了一下制作过程。推荐这篇教程文字云制作全攻略阿文p...
    zh楠楠阅读 5,517评论 0 0