zoukankan      html  css  js  c++  java
  • PHP扩展中访问全局变量$_POST,$_GET,$_SERVER等


    写扩展,离不了访问全局变量像$_POST,$_GET,$_SERVER等,

    以下是YAF提供的代码,我把YAF相关的宏,去掉了...

      1 /**  YAF文档 http://yaf.laruence.com/manual/  **/

     2 
     3 
     4 zval * yaf_request_query(uint type, char * name, uint len TSRMLS_DC) {
     5     zval        **carrier, **ret;
     6 
     7 #if (PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION < 4)
     8     zend_bool   jit_initialization = (PG(auto_globals_jit) && !PG(register_globals) && !PG(register_long_arrays));
     9 #else
    10     zend_bool   jit_initialization = PG(auto_globals_jit);
    11 #endif
    12 
    13     /* for phpunit test requirements */
    14    switch (type) {
    15         case TRACK_VARS_POST:
    16         case TRACK_VARS_GET:
    17         case TRACK_VARS_FILES:
    18         case TRACK_VARS_COOKIE:
    19             carrier = &PG(http_globals)[type];
    20             break;
    21         case TRACK_VARS_ENV:
    22             if (jit_initialization) {
    23                 zend_is_auto_global(ZEND_STRL("_ENV") TSRMLS_CC);
    24             } 
    25             carrier = &PG(http_globals)[type];
    26             break;
    27         case TRACK_VARS_SERVER:
    28             if (jit_initialization) {
    29                 zend_is_auto_global(ZEND_STRL("_SERVER") TSRMLS_CC);
    30             } 
    31             carrier = &PG(http_globals)[type];
    32             break;
    33         case TRACK_VARS_REQUEST:
    34             if (jit_initialization) {
    35                 zend_is_auto_global(ZEND_STRL("_REQUEST") TSRMLS_CC);
    36             } 
    37             (void)zend_hash_find(&EG(symbol_table), "_REQUEST"sizeof("_REQUEST")-1, (void **)&carrier);
    38             break;
    39         default:
    40             break;
    41     }
    42 
    43     if (!carrier || !(*carrier)) {
    44         zval *empty;
    45         MAKE_STD_ZVAL(empty);
    46         ZVAL_NULL(empty);
    47         return empty;
    48     }
    49 
    50     if (!len) {
    51         Z_ADDREF_P(*carrier);
    52         return *carrier;
    53     }
    54 
    55     if (zend_hash_find(Z_ARRVAL_PP(carrier), name, len + 1, (void **)&ret) == FAILURE) {
    56         zval *empty;
    57         MAKE_STD_ZVAL(empty);
    58         ZVAL_NULL(empty);
    59         return empty;
    60     }
    61     
    62     Z_ADDREF_P(*ret);
    63     return *ret;
    64 }
  • 相关阅读:
    二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
    (2)入门指南——(7)添加jquery代码(Adding our jQuery code)
    Citrix 服务器虚拟化之三十一 XenApp 6.5负载均衡
    CSS——inline-block属性
    VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
    [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序
    ElasticSearch NEST笔记
    什么是REST API?
    ArrayList与List<T>笔记
    C# Socket SSL通讯笔记
  • 原文地址:https://www.cnblogs.com/bqrm/p/2708655.html
Copyright © 2011-2022 走看看