Установка магенто на PHP7, значительно улучшит производительность сайта. Но просто так поставить на новую версию PHP не получится, в ходе своей работы я нашел только две ошибки, которые повлияют на работу magento. С этими двумя проблемами я столкнулся в версиях от 1.9.1 до 1.9.2.3., последнюю версию 1.9.2.4, я не проверял и не тестил, но скорее всего в ней эти проблемы также присутствуют.
Ошибка генерации шаблонов Magento (Fatal error: Uncaught Error: Function name must...)
После перехода PHP на версию 7, после первой загрузки страницы, у вас скорее всего будет фатальная ошибка следующего содержания:
Fatal error: Uncaught Error: Function name must be a string in app/code/core/Mage/Core/Model/Layout.php:555
Эта ошибка связана с изменением в обработке переменных, нужно указать PHP 7, что вы используете "$callback" переменную как метод или функцию. Поэтому вам нужно исправить стандартное присвоение переменной "$out" в функции getOutput(), т.е. исправить строчку:
$out .= $this->getBlock($callback[0])->$callback[1]();
Для того чтобы всё заработало, исправляем ее на:
$out .= $this->getBlock($callback[0])->{$callback[1]}();
Для безопасности ядра и дальнейшего обновления CMS Magento, вынесите класс “Mage_Core_Model_Layout” в local, т.е. скопируйте файл "Layout.php" в " app/code/local/Mage/Core/Model/" с созданием всех недостающих папок.
После внесения этих изменений сайт будет нормально загружаться, но только в том случае если вы не используете сторонние модули или шаблоны, где могут быть схожие проблемы.
PHP7 и ошибка загрузки изображений - Upload HTTP Error (HTTP ошибка при закачивании)
Следующая ошибка возникает, когда вы попытаетесь загрузить изображение в категорию или товар, ошибка будет показана в административной части сайта или будет записана в логах как фатальная ошибка.
Мне решить эту проблему помогло исправление в одном файле - /lib/Varien/File/Uploader.php. Это также, как и выше связано, с изменениями в php7, теперь переменные интерпретируются строго слева направо.
Находим строку
$params['object']->$params['method']($this->_file['tmp_name']);
И меняем ее на
$params['object']->{$params['method']}($this->_file['tmp_name']);
После этого, все снова заработало.
Но я пока не уверен, что проблемы совместимости, закончились только на этих двух проблемах.