問題
したがって、$ _ REQUEST、$ _ POST、$ _ GET、または$_COOKIE配列からデータを取得して処理するこの関数があります。関数呼び出しからのみ使用する配列がわかります。簡略化された例:
function gg( $name, $type="_REQUEST" ) {
return isset( $GLOBALS[$type][$name] ) ? $GLOBALS[$type][$name] : false;
}
そしてそれは次のような呼び出しに対して完全に機能します:
gg('var', '_GET');
gg('var2', '_POST');
しかし、次の場合に劇的に失敗します。
gg('var');
// or
gg('var', '_REQUEST');
私はこの問題を2行に単純化することができました:
print_r( $GLOBALS['_REQUEST'] ); // this line returns nothing...
print_r( $_REQUEST ); // ...UNLESS this line is present anywhere in the code
さて、私の明らかな質問は、この$_REQUEST配列を$GLOBALSに存在するように初期化する必要があるかどうかです。
追加情報:
php: 5.3.3-7
apache: 2.2.16
also I'm running on CGI/FastCGI
編集と解決策
1
ここにあるように、最も簡単な解決策は、php.iniを編集し、auto_globals_jitの値をオンからオフに変更することです。
auto_globals_jit Off
2
これの代わりに、ソースファイル内でini_set()を使用できますが、私には機能しませんでした...
ini_set("auto_globals_jit", "Off");
3
さらに別の解決策は、$_REQUESTを除くすべてに$GLOBALS配列を使用し、 $ _REQUEST要求の場合は$_REQUEST配列を直接呼び出すことです:D
if($type == "REQUEST") return $_REQUEST[$name];
else return ${"_".$type}[$name]; // or $GLOBALS["_".$type][$name] if previous won't work