Intereting Posts
Добавление строки запроса к случайному URL-адресу как я могу читать файлы редактирования pptx / docx / xlsx с помощью PHP? Цикл Foreach объявляет переменную в массиве select table XPath для рекурсивного удаления пустых узлов DOM? Перечислить зарегистрированные пространства имен объекта PHP DOMDocument Импланировать массив с помощью «,» и добавить «и» до последнего элемента preg_match получить mp3 и mp4 имена файлов в порядке расширения файлов, а затем в порядке имен файлов с внешней веб-страницы? Как нажимать копию объекта в массив в PHP Доступ к двумерным массивам PHP Как удалить строку с помощью первичного ключа с использованием внешнего ключа из другой таблицы? PHP Image Resize / Relocate – Ускорение PHP: самый простой способ получить дату месяца за 6 месяцев до первого? Как я могу улавливать данные из XML-содержимого запроса SOAP в php SOAPServer? Как вставить значения из датпикера JQuery в формат даты в MySQL с помощью Codeigniter? Как проверить, не является ли регулярное выражение вредным для PHP?

$ _REQUEST superarray не инициализируется в $ GLOBALS массиве

ПРОБЛЕМА

Таким образом, у меня есть эта функция для извлечения и обработки данных из массивов $ _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'); 

Мне удалось упростить эту проблему до двух строк:

 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 to 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 

Не удалось воспроизвести это при моей настройке, так что это может быть проблема CGI? В качестве обходного пути вы могли бы сделать что-то вроде этого …

 function gg( $name, $type="_REQUEST" ) { return isset( ${$type}[$name] ) ? ${$type}[$name] : false; } 

Может представлять интерес:

Начиная с PHP 5.4 $ GLOBALS теперь инициализируется точно в срок. Это означает, что теперь есть преимущество не использовать переменную $ GLOBALS, так как вы можете избежать накладных расходов на ее инициализацию. http://www.php.net/manual/en/reserved.variables.globals.php

Обновить. Посмотреть сообщение:

$ _REQUEST не создается при использовании переменных переменных?

Просто подсказка:

 function gg( $name, $type="_REQUEST" ) { if($type=="_REQUEST")return $GLOBALS[$name]; return isset( $GLOBALS[$type][$name] ) ? $GLOBALS[$type][$name] : false; } 

Как только я сделал такую ​​функцию, как ваша:

  function get_data($name) { if(isset($_GET[$name]))return $_GET[$name]; if(isset($_POST[$name]))return $_POST[$name]; } 

$ _REQUEST уже суперглобальный, что означает, что они доступны во всех областях в сценарии. Нет необходимости делать глобальную переменную $, чтобы получить доступ к ним в рамках функций или методов ».

 function gg( $name, $type="_REQUEST" ) { switch ($type) { case '_REQUEST': return $_REQUEST[$name]; break; case 'GLOBALS': return $_GLOBALS[$name]; break; // etc... default return false; }