2

我现在正在研究用 C 编写的 php 扩展。在扩展中,我需要获取 GET 或 POST 变量并做一些工作。但是出现了问题,如果我像这样在 PHP 脚本中声明一个变量:

$_GET['q'] = 'some text on there';

然后我尝试在 PHP 扩展中获取这个变量,如下所示:

HashTable *h;
char * ret_path;
zval * g_arr;
zval ** findarr;
g_arr = PG(http_globals)[TRACK_VARS_GET];
h = Z_ARRVAL_P(g_arr);
if(SUCCESS == zend_hash_find(h, "q", sizeof("q"), (void **)&findarr)) {
    //some code there
}else{

}

它找不到变量。PHP 如何在内部处理脚本中的 GET 或 POST 超全局变量?

4

1 回答 1

0

您可能使用以下代码:

zval    **carrier, **ret;
carrier = &PG(http_globals)[TRACK_VARS_GET];

if (!carrier || !(*carrier)) {
    zval *empty;
    MAKE_STD_ZVAL(empty);
    ZVAL_NULL(empty);
    return empty;
}

if (!len) {
    Z_ADDREF_P(*carrier);
    return *carrier;
}

if (zend_hash_find(Z_ARRVAL_PP(carrier), "q", 1 + 1, (void **)&ret) == FAILURE) {
    zval *empty;
    MAKE_STD_ZVAL(empty);
    ZVAL_NULL(empty);
    return empty;
}

return *ret;
于 2013-08-21T09:42:36.867 回答