PHP 5.4: register_globals и magic_quotes больше нет
2 мин чтения
1 марта вышел PHP 5.4. Хостеры обычно переходят на новую версию не сразу, но рано или поздно перейдут, и старые скрипты могут лечь. Проверил у себя дома, пока есть время.
Что убрали
register_globals. Раньше параметр из адреса ?id=5 сам превращался в переменную $id. Удобно и дыряво, по умолчанию выключено давно, но на старых хостингах его часто включали ради старых скриптов. Теперь его нет совсем, и такой скрипт просто не увидит $id. Лечится заменой на $_GET['id'] в каждом месте.
magic_quotes_gpc. PHP больше не добавляет обратные слэши перед кавычками в данных из форм. Если скрипт рассчитывал на это и сам ничего не экранирует, в запросах к базе появляется дыра. Если наоборот, скрипт снимал слэши через stripslashes, ничего страшного, он просто будет снимать то, чего нет.
safe_mode. Его тоже нет. Хостерам придется ограничивать скрипты по-другому, нам это почти не заметно.
Еще изменение: передача по ссылке при вызове функции, foo(&$x), теперь фатальная ошибка, а не предупреждение. В старом коде Joomla-плагинов такое встречал.
Что добавили
Короткая запись массивов, как в JavaScript:
$a = [1, 2, 3];
$b = ['name' => 'rizloff', 'year' => 2012];
И встроенный веб-сервер для проверки. Апач ради этого поднимать не нужно, запускаем в папке с сайтом:
php -S 127.0.0.1:8000
и открываем в браузере 127.0.0.1:8000. Для боевого сайта это не годится, а посмотреть, работает ли старый скрипт на новой версии, — в самый раз.
Как проверить свой сайт
Поставил 5.4 в виртуалку, скопировал туда сайт и включил показ всех ошибок:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Прошелся по страницам. WordPress работает без замечаний, он к этому готов давно. Сломался один старый самописный скрипт с register_globals, который я писал лет пять назад. Переписал за вечер.
Если у вас на хостинге в .htaccess есть строчки php_flag register_globals on или php_flag magic_quotes_gpc on, это первый признак, что что-то держится на старом поведении. Лучше поправить сейчас, а не в тот день, когда хостер молча обновит PHP. Про требования WordPress к версии PHP я писал в прошлом году.