ПРОБЛЕМА
Итак, у меня есть эта функция для извлечения и обработки данных из массивов $ _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 с On на Off.
auto_globals_jit Off
2
Вместо этого вы можете использовать ini_set () внутри вашего исходного файла, однако у меня это не сработало ...
ini_set("auto_globals_jit", "Off");
3
Еще одно решение - использовать массив $ GLOBALS для всего, кроме $ _ REQUEST , а для запросов $ _REQUEST вызывать напрямую массив $ _REQUEST: D
if($type == "REQUEST") return $_REQUEST[$name];
else return ${"_".$type}[$name]; // or $GLOBALS["_".$type][$name] if previous won't work