rizloff
Веб

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 я писал в прошлом году.

Что-то не сработало или нашли ошибку — напишите: rizloff@gmail.com или @rizloff в Telegram.