2012-04-23 22 views
2

我現在正在研究一個用C語言編寫的php擴展。在擴展中,我需要獲取GET或POST變量並做一些工作。但問題的發生,如果我在PHP腳本聲明一個變量是這樣的:在PHP c擴展中有關POST或GET變量的混淆?

$_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 2012-04-23 21:24:03

回答

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;