Переводим Magento 1 на PHP7, часть 1

Язык PHP постоянно развивается, и в настоящее время актуальной является уже 7-я его версия. Интерпретатор этой версии работает заметно шустрее предыдущих — многие веб-мастера отмечают 2-3 кратный прирост производительности скриптов, и, соответственно, весьма заметное понижение нагрузки на сервер.

Magento — это довольно «тяжелая» система, и перевод на PHP7 для неё весьма желателен. Но, вплоть до Magento 2, система была рассчитана на работу под PHP 5.x, и с 7-ми версиями PHP «из коробки» просто так не работает.

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

Перейдем к сути. Во-первых, перед заменой версии PHP, в Magento необходимо отключить кэш и компиляцию. И, да: вы же не производите апгрейд PHP непосредственно на рабочем сервере? Если по каким-то причинам все же производите, то создайте в корневом каталоге сайта файл maintenance.flag, он переведет Magento в режим обслуживания. Разумеется, после полного бэкапа файлов и баз(ы) данных.

Далее, выбираем один из вариантов приведения Magento в PHP7-совместимое состояние:

Вариант 1. С минимальным вмешательством, подходит для более-менее свежих версий Magento CE, вроде 1.9.2.4. Патчим систему:

# запускаем в корневом каталоге Magento

# одной строкой, с использованием wget
wget -qO- 'https://gist.githubusercontent.com/MageMechanic/66449504110fbbd96214/raw/php7_magento_1_9_core.patch' | patch -p0

# одной строкой, с использованием curl
curl -s 'https://gist.githubusercontent.com/MageMechanic/66449504110fbbd96214/raw/php7_magento_1_9_core.patch' | patch -p0

# более наглядно:
PATCH_URL='https://gist.githubusercontent.com/MageMechanic/66449504110fbbd96214/raw/php7_magento_1_9_core.patch'

# применяем через wget
wget -qO- $PATCH_URL | patch -p0

# ...или через curl
curl -s $PATCH_URL | patch -p0

# откатить изменения через wget  
wget -qO- $PATCH_URL | patch -p0 -R

# ...или через curl  
curl -s $PATCH_URL | patch -p0 -R

Вариант 2. Решение от того же автора, что и патч выше. Устраняет так же потенциальные проблемы с загрузкой изображений при создании/редактировании товара. Рекомендуется для версий Magento CE от 1.9 до 1.9.3.1.

Скачиваем и ставим плагин вручную (распаковываем в корневой каталог Magento).

или

Устанавливаем через modman:

modman clone https://github.com/MageMechanic/PhpSeven.git --branch 1.0.3

или

Устанавливаем через composer:

composer config repositories.magemechanic git https://github.com/MageMechanic/PhpSeven.git
composer require "magemechanic/phpseven:1.0.3"

Вариант 3. Решение от старых и проверенных Magento-разработчиков, компании Inchoo. Рекомендуется для версий Magento CE от 1.9, подходит и для Magento EE от 1.4.2.2. Плагин хорош полной обратной совместимостью с PHP 5.x, т.е, в случае необходимости откатить версию PHP, вам не понадобится выключать этот плагин или отменять патч. Также, рекомендован к установке после применения патча SUPEE-8788  (о котором будет отдельная статья). Устанавливается просто: скачиваем и распаковываем в коренной директории Magento.

Итак, после применения патча или установки одного из плагинов совместимости, вы получите Magento, работающую под PHP7. Поздравления! Теперь можно удалить (или переименовать) файл maintenance.flag, и проверить работу вашего интернет-магазина. Если в вашей системе не было устаревших сторонних плагинов, то все должно будет сразу корректно заработать, и можно будет включить кэш и скомпилировать заново исполняемые файлы (не просто включить компиляцию!). Учтите, проверке должны подвергнуться все аспекты работы магазина: от регистрации и логина клиента, совершения им разных типов покупок, до создания продукта в админке, правке категорий, атрибутов и типов продуктов. Увы, как показывает практика, после перехода на PHP7 может возникнуть немало неочевидных проблем, и о них мы поговорим в следующей части статьи.

Источники:

https://gist.github.com/MageMechanic

 
http://inchoo.net/magento/its-alive/