Конвертировать большой php проект из register_globals в _GET ["param"] - PullRequest
1 голос
/ 07 июня 2011

У меня довольно большой php-сайт, который был написан для php4 и включен register_globals.Это старая кастомная CMS.Теперь я хочу запустить его на хостинге php5 без register_globals.Можно ли с помощью какого-либо сценария автоматически изменить синтаксический анализ параметров с $ id на $ _GET ["id"]?

Я могу получить имена параметров из wget -r на этом сайте.

ЭтоУ меня есть десятки php-скриптов, и это изменение не очень легко сделать вручную.

PS: ОБНОВЛЕНИЕ: Я хочу конвертировать только переменные GET.Дополнительная строка $var_name = $_GET["var_name"] для каждого параметра.Эта строка должна быть вставлена ​​очень высоко в сценарии, например, добавив новый раздел <? ?> в самом верху.

Ответы [ 3 ]

4 голосов
/ 07 июня 2011

Запуск такого инструмента привел бы к большому риску появления ошибок в коде.

Я бы предложил запустить extract () для суперглобальных элементов, чтобы вы заставили register_globals и приложение работало правильно.

http://php.net/manual/pl/function.extract.php

Затем, когда все будет хорошо, напишите OO-оболочку для входных параметров, упакуйте ее в красивый DI-контейнер и начните вручную переводить весь сценарий в новый стиль.

1 голос
/ 07 июня 2011

Я не знаю ни одного инструмента, который бы помог вам в конвертации, но у вас есть несколько вариантов:

  1. Имитируйте глобальные переменные регистров, выполнив те же действия, что и register_globals: в начале скрипта поместите все переменные из GET и POST в пространство имен глобальных переменных (т.е. через extract). Хотя это самое быстрое и простое решение, оно приведет к проблемам с безопасностью, которыми был известен register_globals, и не поможет с производительностью вашего приложения
  2. Определите используемые переменные и загрузите их только через скрипт init только в $ GLOBALS. Все еще не приятно
  3. Определите используемые переменные и замените использование GLOBALS на REQUEST
  4. Пройдите через это вручную. Таким образом, вы можете быть уверены, что все правильно, и потом у вас будет меньше проблем.

Из вашего описания, решение 1 или 2 может быть лучшим для вас, поскольку кажется, что cms все равно не обновляется (что обидно).

0 голосов
/ 07 июня 2011

Хотя фактическое обнаружение / замена может занять больше времени, выполнение этого вручную, скорее всего, приведет к меньшему количеству ошибок / странного поведения.

Если вы не являетесь первоначальным автором приложения, то это ручное обнаружение / заменаэто также возможность для вас лучше познакомиться с базой кодов, чем с каким-либо автоматическим методом.

Автоматически: быстро, почти наверняка приведет к ужасным ошибкам

Вручную: медленнее (скорее всего),почти наверняка приведет к лучшему пониманию, уменьшению количества ошибок - и любые обнаруженные ошибки будет легче исправить из-за вашего лучшего понимания.

...