php内核,取超全局变量$_SERVER,取域名例子

php _server 域名 编程技术
发布日期 2023-06-02 更新日期 2023-06-04 阅读次数 93 文章字数 1.2k

超全局变量,存储在EG中,一般有_GET、_POST,_COOKIE等

只读环境变量的读取方式:

&PG(http_globals)[TRACK_VARS_GET];
&PG(http_globals)[TRACK_VARS_POST];
&PG(http_globals)[TRACK_VARS_REQUEST];
&PG(http_globals)[TRACK_VARS_COOKIE];
&PG(http_globals)[TRACK_VARS_ENV];
&PG(http_globals)[TRACK_VARS_FILES];

但是PHP设计其实就是利用”懒惰”的思路进行优化,标记了JIT=1的超级全局变量,默认PHP是不会执行auto_global_callback进行初始化的。除非用户主动的声明要访问它,也就是调用zend_is_auto_global_str(zend_is_auto_global),以取$_SERVER为例代码:

    //先尝试加载$_SERVER,默认情况下可能为空
    zend_is_auto_global_str("_SERVER", sizeof("_SERVER") - 1);
    //取$_SERVER
    zval *server = zend_hash_str_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER") - 1);
    //已知$_SERVER是一个数组,直接返回$_SERVER数组
    // RETURN_ARR(Z_ARR_P(server));
    
    //取域名
    zval * host = zend_hash_str_find(Z_ARRVAL_P(server), ZEND_STRL("HTTP_HOST"));
    if(Z_TYPE_P(host) == IS_STRING){
        char * host1 = zend_string_copy(Z_STR_P(host));
        RETURN_STR(host1);  //返回HTTP_HOST字符串
    }else{
        RETURN_NULL();
    }

取域名例子2

    //先尝试加载$_SERVER,默认情况下可能为空
    zend_is_auto_global_str("_SERVER", sizeof("_SERVER") - 1);
    //取$_SERVER
    // zval **c;
    zval *server = zend_hash_str_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER") - 1);
    zend_string *str;
    str = zend_string_init(ZEND_STRL("HTTP_HOST"), 0);
    // RETURN_STR(str);
    zval * findRes = zend_hash_find(Z_ARRVAL_P(server),str); //zend * zend_hash_find(hashTable, zend_string)
    zend_string *hostName = zend_string_copy(Z_STR_P(findRes));  //此时可以用char *或者zend_string *接收,后者更严谨
    RETURN_STR(hostName);

文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-413.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

php _server 域名

发表评论

相关推荐
朱丰华   |   9个月前   |   php

php判断是否被iframe

247    评论    点赞
朱丰华   |   1年前   |   php

php正则表达式定界符:异常Delimiter must not be alphanumeric or backslash

201    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

223    评论    点赞
朱丰华   |   1年前   |   正则 · 表达

正则表达式,实现if...then...else

128    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

131    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 字符串

如何在 PHP 中将字符串的第一个字母转换为大写

165    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 正则

php正则表达式原生字符

95    评论    点赞
朱丰华   |   1年前   |   字符 · php · 比较

PHP比较字符串大小相关函数

120    评论    点赞
朱丰华   |   1年前   |   php

windows下编写、编译php扩展

177    评论    点赞
朱丰华   |   1年前   |   linux · php

linux下编写、编译php扩展

161    评论    点赞
朱丰华   |   1年前   |   php · 混淆 · obfuscate · git

yakpro-po混淆php代码

115    评论    点赞
朱丰华   |   1年前   |   php

php扩展编译nts的方法

97    评论    点赞
朱丰华   |   1年前   |   js · vue · npm · 安装

npm快速上手

111    评论    点赞
朱丰华   |   1年前   |   linux · 变量 · 环境

linux查看环境变量、设置环境变量

102    评论    点赞
朱丰华   |   1年前   |   js · php · 字符 · 字符串

php json_encode对字符串转义用法

144    评论    点赞
朱丰华   |   1年前   |   php · 捕获

php Fatal error怎么捕获

137    评论    点赞
朱丰华   |   1年前   |   php · 编译

ubuntu、centos系统从源码编译指定版本php--超详细

168    评论    点赞
朱丰华   |   1年前   |   php · git · 编译

从源码编译php

143    评论    点赞
朱丰华   |   1年前   |   php · zend · 反射 · api

php zend引擎api接口:ZENDAPI阅读,反射调用示例

134    评论    点赞
朱丰华   |   1年前   |   php · 引用 · 变量 · c语言

php扩展内存管理与引用计数

139    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞