Я обслуживаю несколько сайтов, висящих на одном сервере. Сайты как на движке Joomla, таки на Wordpress. В какой-то момент Joomla 3.5 написала в админки, что мой PHP 5.6 устарел, больше не поддерживается, и поэтому там могут быть проблемы с безопасностью. И посоветовала перейти на PHP 7. А почему бы и нет...
Что хорошего обещают в PHP 7
PHP 7 в основном славиться производительность и уменьшением потребляемой памяти. Разработчики и блоггеры утверждают, что код выполняется почти вдвое быстрее по сравнению с php5.6
Также в языке много нововведений, улучшающих жизнь программистам.
Но, главная проблема с PHP7 - она не обратносовместима с PHP5.6. Т.е. разработчики не гарантируют, что ваш старый код будет работать в новой версии PHP. Подробнее ниже.
Проблемы при переходе на PHP7
WordPress
Сайты с WordPress перешли на php7 довольно легко: пришлось лишь удалить один плагин, прячущий раскрывающиеся текст под знак плюса.
Joomla 2.5 не поддерживает PHP 7
Большой неожиданностью было то, что Joomla 2.5 не поддерживает PHP7. Сайт ещё худо-бедно работает, отображая не все страницы, а в админку не зайти совсем. Поэтому перед переходом на PHP7 придётся обвить старую Джумлу до Joomla 3.5 а потом до Joomla 3.7.
Плагины и компоненты Joomla и php7
Даже если у вас Joomla 3.7 не факт, что при переходе на php7 ничего не сломается: некоторые плагины и компоненты ещё не поддерживают php7. При переезде рекомендуется отключить все плагины и модули, а после переезда включать их по-одному. В противном случае может не открываться админка.
Проблема тут в том что в php 7 изменили порядок применения операторов:
Исходный код:
$foo->$bar['baz']
В версии php5.6 понимается как:
$foo->{$bar['baz']}
А, php7 понимает его уже совсем по-другому:
($foo->$bar)['baz']
В принципе, если компонент очень ценен для вас, то вы можете самостоятельно исправить проблему, расставив в нужных местах скобки: $foo->{$bar['baz']}. Для этого в админке Joomla включаете показ всех возможных ошибок, а потом по именам файлов и номерам строчек ищете соответствующие проблемы.
Nginx выдаёт белый экран
Проблема тут не в php, а в переходе на Nginx 1.10. У него изменился синтаксис конфигурационных файлов.
Теперь вместо:
include fastcgi_params;
нужно писать:
include fastcgi.conf;
Ощущения после перехода на php7
Действительно ли php7 работает быстрее?
На моём сервере крутятся несколько сайтов, и большую часть процессора и памяти пожирает MySql. Поэтому переход на php7 ни понизил нагрузку на процессор, ни уменьшил количество потребляемой памяти.
Ещё один способ оценить прирост скорости - посмотреть на время загрузки страницы. Удобнее всего посмотреть его в GoogleWebmasters: там время показано на графике за период в несколько месяцев. Для моих сайтов время загрузки страницы не изменилось. Возможно даже стало чуть медленнее.
Nginx 504 Gateway Time-out
Очень часто стало вылетать при пользовании админкой Joomla 3.7. Особенно при публикации комментариев компонента JComments. Пока не очень ясно проблема ли это Joomla, либо негативно сказался переход на php7.
Совет прописать больший timeout в настройках nginx:
fastcgi_read_timeout 300;
- ничего не дал. Nginx действительно дольше ожидает ответа php-fpm, но в конце всё-равно выдаёт Gateway Time-out.
Заключение
Переходить на php7 всё-равно когда-нибудь потребуется, как и переходить на Joomla 3.7. И переход этот не будет безболезненным: скорее всего потребуется что-то исправлять или от чего-то отказываться.
В качестве совета счастливым владельцам сайта на Joomla могу посоветовать подождать ещё немного: возможно кто-то из разработчиков компонентов/модулей/плагинов выпустит новую версию, совместимую с PHP7.