首页 > Web开发 > 详细

一个PHP操作大变量的例子

时间:2015-09-24 00:49:20      阅读:299      评论:0      收藏:0      [点我收藏+]

By C extensions we can directly manipulate the large PHP variables, such as:GET,POST,SERVER

You can fetch $_SERVER[‘PHP_SELF‘] (or any other $_SERVER variable if you need to), like this:

// This code makes sure $_SERVER has been initialized
if (!zend_hash_exists(&EG(symbol_table), "_SERVER", 8)) {
    zend_auto_global* auto_global;
    if (zend_hash_find(CG(auto_globals), "_SERVER", 8, (void **)&auto_global) != FAILURE) {
        auto_global->armed = auto_global->auto_global_callback(auto_global->name, auto_global->name_len TSRMLS_CC);
    }
}

// This fetches $_SERVER[‘PHP_SELF‘]
zval** arr;
char* script_name;
if (zend_hash_find(&EG(symbol_table), "_SERVER", 8, (void**)&arr) != FAILURE) {
    HashTable* ht = Z_ARRVAL_P(*arr);
    zval** val;
    if (zend_hash_find(ht, "PHP_SELF", 9, (void**)&val) != FAILURE) {
        script_name = Z_STRVAL_PP(val);
    }
}

The script_name variable will contain the name of the script.

In case you‘re wondering, the first block, that initializes $_SERVER, is necessary because some SAPIs (e.g.: the Apache handler) will initialize $_SERVER only when the user script accesses it (just-in-time). Without that block of code, if you try to read $_SERVER[‘PHP_SELF‘] before the script tried accessing $_SERVER, you‘d end up with an empty value.

Obviously, you should add error handling in the above code in case anything fails, so that you don‘t invoke undefined behavior when trying to access script_name.

or

You can fetch GET ,like this

// This code makes sure $_SERVER has been initialized                                                                             
    if (!zend_hash_exists(&EG(symbol_table), "_GET", 5)) {
        zend_auto_global* auto_global;
        if (zend_hash_find(CG(auto_globals), "_GET", 5, (void **)&auto_global) != FAILURE) {
            auto_global->armed = auto_global->auto_global_callback(auto_global->name, auto_global->name_len TSRMLS_CC);
        }
    }

    // This fetches $_SERVER[‘PHP_SELF‘]
    zval** arr;
    char* script_name;
    if (zend_hash_find(&EG(symbol_table), "_GET", 5, (void**)&arr) != FAILURE) {
        HashTable* ht = Z_ARRVAL_P(*arr);
        zval** val;
        if (zend_hash_find(ht, "HOSTNAME", 9, (void**)&val) != FAILURE) {
            script_name = Z_STRVAL_PP(val);
            php_printf(script_name);
        }else {
        
            php_printf("sorry!!!");
        }
    }
}

so,This prevents attacks, it will be a good way

一个PHP操作大变量的例子

原文:http://www.cnblogs.com/chenpingzhao/p/4833984.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!