Является ли использование $ GLOBALS ['HTTP_GET_VARS'] устаревшим? - PullRequest
3 голосов
/ 18 мая 2011

Я знаю, что использование $HTTP_GET_VARS не рекомендуется, но как насчет использования $GLOBALS['HTTP_GET_VARS']?Возможно ли, что этот ключ массива исчезнет в будущем?

У меня в основном есть все перечисленное в устаревшем проекте, который мне нужно интегрировать с CMS, и я действительно не хочу обновлять его, если это не является строго необходимым.

function table_manager_import_vars($var) {
   $vars = explode(",", $var);

   foreach($vars AS $var) {
       switch ($var) {
           case "G":
               $var = "HTTP_GET_VARS";
               break;
           case "P":
               $var = "HTTP_POST_VARS";
               break;
           case "C":
               $var = "HTTP_COOKIE_VARS";
               break;
           case "S":
               $var = "HTTP_SESSION_VARS";
               //session_start();
               break;
           case "E":
               $var = "HTTP_SERVER_VARS";
               break;
       }
       if (isset($GLOBALS[$var])) {
           if (is_array($GLOBALS[$var])) {
               foreach($GLOBALS[$var] AS $var1 => $value) {
                   if ($var1 != $var) {
                       $GLOBALS[$var1] = $value;
                   }
               }
           }
       }
   }
}
// called like this
table_manager_import_vars("G,P,C,S,E");

И да, как вы уже догадались, такая функция существует для каждого аспекта проекта, каждый раз с другим именем !!

Ответы [ 3 ]

11 голосов
/ 18 мая 2011

Ваш вопрос:

Использование $ GLOBALS ['HTTP_GET_VARS'] устарело?

Ответ:

Да, это так.

http://www.php.net/manual/en/reserved.variables.get.php

Эта страница прямо заявляет, что $HTTP_GET_VARS устарела, и вместо нее следует использовать $_GET.

$HTTP_GET_VARS - это то же самое, что и $GLOBALS['HTTP_GET_VARS'].И поэтому это также не рекомендуется по причине.(обратите внимание, что на все переменные, определенные в глобальной области видимости, можно ссылаться с помощью $GLOBALS['variablename'])

Кстати: когда дело доходит до работы с устаревшим кодом, использующим $HTTP_GET_VARS, я знаю, что вы сказали, что хотите избежатьизменение кода, если вы можете избежать этого, но стоит отметить, что код этого возраста, вероятно, будет иметь большие проблемы при запуске в современной установке PHP, так как более старые версии PHP предполагали бы, что используются magic_quotes.Если вы запустите тот же код в более новой версии PHP, у вас не будет magic_quotes, поэтому вы должны убедиться, что данные экранированы правильно.

Рассматривая весь полученный код,похоже, что он пытается скопировать все переменные в различных массивах HTTP_***_VARS в глобальную область видимости.Это функциональность, которая была сделана автоматически в действительно старых версиях PHP, но была отброшена, потому что она вызывает серьезные проблемы с безопасностью.Я настоятельно рекомендую отбросить весь этот кусок кода и преобразовать каждый, чтобы использовать вместо него $_GET.Возможно, вы захотите Google для register_globals для получения дополнительной информации о том, почему это плохо.

7 голосов
/ 18 мая 2011

$HTTP_GET_VARS и $GLOBALS['HTTP_GET_VARS'] - это одно и то же. $HTTP_GET_VARS является суперглобальным , и к суперглобальным можно (но не иметь ) доступ через $GLOBALS.

Кроме того, этот код представляет собой огромную дыру в безопасности.

4 голосов
/ 18 мая 2011

Они одинаковые.

$HTTP_GET_VARS равно $GLOBALS['HTTP_GET_VARS'], и поэтому «оба» не рекомендуется в пользу $_GET.

...