Публикации, статьи от веб-студии Webtend. Блог веб-мастера Алексея Блохина

Обязательно ли переходить на PHP 7 для CMS Joomla

Начиная с версии Joomla! 3.5 вышло много весьма полезных дополнений, однако самым главным изменением стало то, что среднестатистический пользователь заметит отнюдь не сразу. И речь, конечно, о возможности поддержки PHP 7.

Заходя в админку выдается предупреждение: Ваша версия PHP, 5.6.29, в настоящее время получает только исправления безопасности от проекта PHP. Это означает, что ваша версия PHP скоро не будет поддерживаться. Мы рекомендуем запланировать обновление до новой версии PHP до конца поддержки 31.12.18. Joomla будет быстрее и более безопасной, если вы обновитесь до новой версии PHP (рекомендуется PHP 7.x). Пожалуйста, свяжитесь с вашим хостингом для получения инструкции по обновлению.

Попробуем разобраться.

Если вас смущает только это предупреждение в админке, то дальше можете не читать, а просто отключить через Менеджер плагинов - Плагин определения версии PHP. На работоспособность сайта это никак не отразиться, а раздражающее вас уведомление (картинка выше) пропадет.

PHP 7 не стоит недооценивать. С его помощью можно снизить показатели отказов и сбоев, увеличить скорость загрузки страниц и сделать работу более мобильной.

Если вы уже читали статьи о принципе и преимуществах использования PHP 7, то наверняка знаете о том, что, по словам разработчиков, внедрение данного языка в CMS значительно повышает их производительность. Однако как же это повлияло непосредственно на Joomla? Этот вопрос и будет рассмотрен в данной статье.

PHP 7 в основном славиться производительность и уменьшением потребляемой памяти. Разработчики и блоггеры утверждают, что код выполняется почти вдвое быстрее по сравнению с php5.6

Также в языке много нововведений, улучшающих жизнь программистам. Подробнее https://habr.com/post/280071/

Но, главная проблема с PHP7 - она не обратносовместима с PHP5.6. Т.е. разработчики не гарантируют, что ваш старый код будет работать в новой версии PHP.

Обновленная версия PHP 7 стала самым весомым событием и важным изменением для PHP, начиная с версии PHP 5, которая, кстати, имела немало недочетов и нареканий от пользователей. Команда разработчиков PHP заявляет о значительном прогрессе в данном, обновленном продукте: производительность повышена вдвое, также на 50% было снижено потребление памяти, в сравнении с предыдущей версией. Также присутствуют новые функции: конвертирование неисправных ошибок в исключения, добавления классов и операторов. Однако есть и плохие новости касающихся пользователей CMS Joomla. Старые версии Joomla 3 (до 3.5) и Joomla 2.5 и 1.5 линеек - не поддерживают PHP7.

Проводилось много тестов для оценки различных показателей работы (производительности) Joomla и php7, например https://www.gavick.com/blog/joomla-php-7-speedtest  https://habr.com/company/mailru/blog/350686/

Все они свидетельствуют о 45-50% приросте производительности и снижении нагрузки на сервер, что важно при тяжелых и посещаемых сайтов.

Как показывают результаты исследования,  введение поддержки PHP 7 в последний релиз Joomla! является крупнейшим доступным улучшением, предлагая гораздо больше, чем простое обновление функций.

Хотя это не то, что вы обязательно заметите, на первый взгляд, тот факт, что скорость загрузки является важным фактором вашего сайта, показатель отказов, а также улучшение потребления памяти важно для сайтов, которые имеют большое количество посетителей и просмотров страниц. На 40% меньше памяти на одну страницу - это действительно много! Учитывая все это, единственный вопрос почему не обновиться сейчас?

Очевидно, что скорость и улучшение памяти - весьма привлекательные параметры, которыми хочется воспользоваться как можно быстрее. Однако в данном деле лучше не спешить, а произвести все обдуманно. Ведь, скорее всего ваш сайт был инсталлирован с использованием ранних версий Joomla! и PHP. И тот факт, что версия Joomla! 3.5 и выше совместима с последним релизом РНР 7 не гарантирует совместимость в сторонних расширениях, уже установленных на вашем сайте. Поэтому, прежде чем приступить к установке обновленной версии РНР, стоит произвести обновление самой Joomla до актуальной версии и проверить совместимость расширений, установленных на вашем сайте. Не забудьте также проверить: совместим ли ваш хостинг с PHP 7. Если нет, то возможно, самое время поискать другого современного хостера, который позволит вам воспользоваться всеми преимуществами новой версии PHP.

Я использую простой подход - если расширение обновлялось в этом году (да и не раз) - то вероятность его совместимости с php7 высока. Но это не факт! Нужно пройтись по сайтам разработчиков ваших расширений и посмотреть там. Есть еще проблема для неподготовленных простых пользователей. Скорее всего у вас менялись шаблоны расширений или они подгонялись под вас, не всегда шаблон расширения вынесен в папку шаблона сайта. При обновлении расширений поверх, может исказится дизайн. Возможно придется выносить шаблоны расширений в правильное место - папка html вашего шаблона сайта. Поэтому всегда все надо делать с архивами базы и всех файлов!!!

Если у вас есть какие то платные расширения под домен, то большая вероятность, что они закодированы IonCube и работать не будут. Подключить ion cube вы сможете конечно - вручную zend_extension = /opt/ioncube/ioncube_loader_lin_7.0.so или галочкой в личном кабинете хостинга, но расширение под ioncube не выше 5.6. Надо узнать у разработчика такого расширения - вышло ли обновление под php7 и скачать его. К счастью это не частая ситуация для обычных сайтов, но возникает в интернет-магазинах, где часто докупаются платные расширения. Например, вот этот разработчик https://joomshopping.pro/ забил на все, не обновляет расширения под php7, никому не отвечает. И такое бывает. Вам придется искать замену таким расширениям или оставить все как есть на php5.6 (рекомендуется).

Произведите полный аудит - что у вас установлено, каких версий и имеется ли совместимость с php7.

Ничего страшного с вашим сайтом, если вы просто переключите в личном кабинете хостинга на php 7 для эксперимента - не произойдет. Переключите в случае чего обратно и все. Этого боятся не надо.

После переключения проверьте работоспособность сайта, всех расширений, админку сайта. Обязательно! зайдите в Общие настройки сайта и Включите Показ всех ошибок для разработчика. Если ошибок в админке не будет, то уже хорошо, переходите на сайт. Даже если их огромное количество - не пугайтесь, попробуйте посмотреть внимательно в коды ошибок. Там как правило в пути ошибки указан компонент (плагин, модуль) и файл в котором она происходит. Обновите этот компонент для начала.

Часто используется страница ошибок своя, а сайт не грузится после перехода на php7 и сразу выдает эту страницу. а на ней не указан код ошибки. При такой ситуации - в папке своего шаблона временно переименуйте error.php. Тогда будет загружаться стандартная страница ошибки и в ней будет строка с указанием пути.

Даже если у вас Joomla 3.8+ не факт, что при переходе на php7 ничего не сломается: некоторые плагины и компоненты ещё не поддерживают php7.

Проблема тут в том, что в php 7 изменили порядок применения операторов (и не только):

Исходный код:
$foo->$bar['baz']
В версии php5.6 понимается как:
$foo->{$bar['baz']}
А, php7 понимает его уже совсем по-другому:
($foo->$bar)['baz']

В принципе, если компонент очень ценен для вас, то вы можете самостоятельно исправить проблему, расставив в нужных местах скобки: $foo->{$bar['baz']}. Для этого в админке Joomla включаете показ всех возможных ошибок, а потом по именам файлов и номерам строчек ищете соответствующие проблемы.

Ошибок бывает много. Для примера: Ошибки и решения при обновлении шаблонов SJ для использования PHP 7.x:

1. Карта Google

Ошибка:
Устаревшие: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; Plugin_googleMaps имеет устаревший конструктор в /plugins/system/ytshortcodes/includes/libs/googlemap/googleMaps.lib.php в строке 385

Решение:

Перейдите по ссылке : /plugins/system/ytshortcodes/includes/libs/googlemap/googleMaps.lib.php

Найти: function Plugin_googleMaps

Заменить на: function __construct

2. Директива Cookie Lite

Ошибка:
Устаревшие: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; plgSystemEUCookieDirectiveLite имеет устаревший конструктор в /plugins/system/EUCookieDirectiveLite/EUCookieDirectiveLite.php в строке 37

Решение:

Перейти к: /plugins/system/EUCookieDirectiveLite/EUCookieDirectiveLite.php

Найти: function plgSystemEUCookieDirectiveLite

Заменить на: function __construct

3. Рамочная программа YT

Ошибка:
Устаревшие: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; YtFrameworkTemplate имеет устаревший конструктор в /plugins/system/yt/includes/site/lib/yt_template.php в строке 16

Решение:

Перейдите по ссылке : /plugins/system/yt/includes/site/lib/yt_template.php

Найти: функция YtFrameworkTemplate

Заменить на: function __construct

4. YT Framework Render XML

Ошибка:
Устаревшие: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; YtFrameworkRenderXML имеет устаревший конструктор в / plugins / system / yt / includes / site / lib / yt_renderxml.php в строке 13

Решение:

Перейдите по ссылке : /plugins/system/yt/includes/site/lib/yt_renderxml.php

Найти: функция YtFrameworkRenderXML

Заменить на: function __construct

5. Рамочный объект YT

Ошибка:
Устаревшие: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; YtObject имеет устаревший конструктор в /templates/sj_imag/menusys/ytobject.php в строке 13

Решение:

Перейдите по ссылке : /templates/sj_revo/menusys/ytobject.php

Найти: функция YtObject

Заменить на: function __construct

6. JW Все видео

Ошибка:
Устаревшие: методы с тем же именем, что и их класс, не будут конструкторами в будущей версии PHP; plgContentJw_allvideos имеет устаревший конструктор в /plugins/content/jw_allvideos/jw_allvideos.php в строке 18

Решение:

Перейти к: /plugins/content/jw_allvideos/jw_allvideos.php

Найти: function plgContentJw_allvideos

Заменить на: function __construct

Ошибки Strict Standards чаще всего лечатся - Убрать из строки &

Вариантов ошибок много и если вы ничего не понимаете - либо оставьте как есть, либо обновите Joomla и все расширения до совместимости с php7 и потом попробуйте переключится на нее. Либо обратитесь к специалистам.

Выводы

Переходить на php7 всё-равно когда-нибудь потребуется для новых сайтов, посещаемых сайтов, сайтов с большой нагрузкой и тд. Joomla 4 будет работать только с php7. И переход этот не будет безболезненным: скорее всего потребуется что-то исправлять или от чего-то отказываться. Чтобы все заработало сразу и без одной ошибки - маловероятно!

В качестве совета могу посоветовать подождать ещё немного: возможно кто-то из разработчиков компонентов/модулей/плагинов имеющихся у вас - выпустит новую версию, совместимую с PHP7. Сейчас уже некоторые расширения нельзя обновить на php5.6 - пишет, что нужна php7. Переходное время, как известно - тяжелое.

Но если ваш сайт работает прекрасно, вы всем довольны - то не надо вообще ничего этого делать. Не нужна вам эта гонка обновлений, она бывает очень неприятной и болезненной! Разве подумать еще - о дополнительной безопасности вашего сайта.

Если вас раздражают все эти сообщения об обновлениях, версиях php, письма на почту и тд. - зайдите в менеджер плвагинов и выключите плагины - уведомление об обновлениях расширений, уведомление об обновлениях Joomla, Проверка версии php, Отправка писем об обновлении (уведомления) и так же статистику. И живите и работаете спокойно.

Часто спрашивают - "написано, что безопасность страдает при php5.6". Не сильно, и если ваш сайт правильно защищен (читайте на нашем специализированном сайте - http://joomlahelth.ru), то прекрасно и безопасно будет работать и на старых версиях Joomla и на старых версиях php.

При создании новых сайтов - однозначно, сразу надо делать на php7.

CMS Joomla

CMS Joomla!

CMS Joomla (джумла) – один из мировых лидеров среди систем для создания сайтов и интернет-магазинов. Предельно простая, удобная, многофункциональная, полностью русифицированная административная часть. Простой и интуитивно понятный интерфейс, позволяющий, не имея специальных технических знаний или навыков программирования, работать с системой управления любому пользователю.

Веб-студия WebTend работает исключительно с системой управления контентом CMS Joomla!

Интернет-магазины создаем на CMS Joomla с немецким компонентом электронной коммерции - Joomshopping.

Подробнее о Joomla