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 に答える