2012-04-23 5 views
2

Я теперь работаю над расширением php, написанным на C. В расширении мне нужно получить переменные GET или POST и выполнить некоторую работу. Но проблемы возникли, если я объявить переменную в PHP скрипт так:путают переменные POST или GET в расширениях PHP c?

$_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 в скрипте?

+1

Попробуйте использовать 'EG (symbol_table)' вместо этого. – Artefacto

ответ

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; 
Смежные вопросы