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 }
  • 相关阅读:
    Python 准确获取今天是星期几的代码(isoweekday和weekday
    python对象之间的交互
    cpu的工作原理
    ubuntu禁止内核自动更新
    计算机组成原理
    python实例化对象过程
    python统计班级学生
    python私有变量和方法
    python变量 方法 属性
    制作再生龙启动盘
  • 原文地址:https://www.cnblogs.com/bqrm/p/2708655.html
Copyright © 2011-2022 走看看