Обязательно ли переходить на PHP 7 для CMS Joomla - Веб-студия WebTend г. Екатеринбург

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

Обязательно ли переходить на PHP 7 для CMS Joomla - Веб-студия 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 7 для CMS Joomla - Веб-студия WebTend г. Екатеринбург

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

Если вас смущает только это предупреждение в админке, то дальше можете не читать, а просто отключить через Менеджер плагинов - Плагин определения версии 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 для CMS Joomla - Веб-студия WebTend г. Екатеринбург

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

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

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

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

Если у вас есть какие то платные расширения под домен (например для интернет-магазина), то большая вероятность, что они скомпилированы под IonCube, Opcache или даже старый  Zend Optimizer хостинга под определенную версию php и работать не будут. Надо узнать у разработчика такого расширения - вышло ли обновление под 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 включаете показ всех возможных ошибок, а потом по именам файлов и номерам строчек ищете соответствующие проблемы.

Другой пример (для пользователей Rocket шаблонов Joomla, ошибка в файлах библиотеки libraries/rokcommon/...):

$id = preg_replace_callback('/(^|_|-)+(.)/', create_function ('$matches', 'return strtoupper($matches[2]);'), $id);

$id = preg_replace_callback('/\.(.)/', create_function ('$matches', 'return "_".strtoupper($matches[1]);'), $id);

исправляется на:

$id = preg_replace_callback('/(^|_|-)+(.)/', function ($matches) { return strtoupper($matches[2]); }, $id);

>$id = preg_replace_callback('/\.(.)/', function ($matches) { return "_".strtoupper($matches[1]); }, $id);

Видите разницу!

Ошибок бывает много. Еще для примера: Ошибки и решения при обновлении шаблонов 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 чаще всего лечатся - Убрать из строки &

Так же смотрите на оф. сайте php  - Изменения в обработке ошибок и исключений: https://www.php.net/manual/ru/migration70.incompatible.php и здесь - Миграция с PHP 5.6.x на PHP 7.0.x https://www.php.net/manual/ru/migration70.php

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

Выводы

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

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

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

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

Часто спрашивают - "написано, что безопасность страдает при php5.6". Не сильно, и если ваш сайт правильно защищен, то прекрасно и безопасно будет работать и на старых версиях Joomla и на старых версиях php.

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

В заключении несколько переводов цитат с официального  сайта Joomla по поводу php 7 и Joomla 4:

Обязательно ли переходить на PHP 7 для CMS Joomla - Веб-студия WebTend г. Екатеринбург

С перспективой Joomla 4 в следующем году мы хотели бы повысить осведомленность о необходимости обновления до PHP 7.
Joomla 4 потребует PHP 7 для запуска. Большинство хостеров уже предлагают PHP 7 в своих пакетах, и вам будет довольно легко изменить версию PHP. 

Причины, по которым вам надо обновить PHP:

PHP 7 лучше

PHP 7 на самом деле имеет улучшение производительности, благодаря которому ваш сайт будет работать в два раза быстрее (по сравнению с PHP 5+) и потребляет на 50% меньше памяти. PHP 7 также более безопасен и позволяет вам делать больше как разработчику.

Joomla 4

Joomla 4 будет иметь огромные улучшения как для пользователей, так и для разработчиков. Исправленный код, обновленный фреймворк, отличные новые функции и многое другое. В ядре будет реализована Bootstrap 4, появятся 2 новых шаблона (frontend и backend), новый медиа-менеджер понравится многим.

Поскольку Joomla 4 все еще находится в стадии разработки, то список функций будет еще расширяться.

Обновленная структура

Обновленный Framework (версия 2.0), поставляемый с Joomla 4, имеет некоторые значительные улучшения. API базы данных будет изначально поддерживать подготовленные операторы, что является существенным улучшением безопасности. Хранение зашифрованных данных теперь возможно с помощью модульного компонента Keychain. Инструменты командной строки можно создавать лучше и безопаснее благодаря новому компоненту консоли.

Это более безопасно и поддерживается

Версии, более старые, чем PHP 5.6, больше не поддерживаются для исправлений безопасности. Например - в PHP 5.3 обнаружена большая уязвимость, никто не собирается ее исправлять, и ваш сайт будет уязвим. Используя последнюю версию, вы всегда будете знать, что об этих возможных проблемах позаботятся, и обновления будут доступны вам очень быстро, когда они появятся.
Поскольку PHP 7 является последней основной версией, она будет поддерживаться в течение длительного времени (включая второстепенные выпуски), поэтому ваш веб-сайт Joomla 4 будет легко работать до 2025 года.

Что если я не могу обновить?

Важно помнить, что Joomla 3.9+ будет поддерживаться в течение двух лет после ее выпуска. Это означает, что вы можете комфортно управлять своим сайтом Joomla 3 до 2020 года, но вы упустите все замечательные возможности и преимущества Joomla 4.

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

Смысл тут один - Joomla 4 будет работать только на php7+. 3 же линейка Joomla может работать на php5+.

Обновлять или не обновлять - решать только вам, с учетом всего мною написанного в начале статьи...

CMS Joomla

CMS Joomla!

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

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

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

Подробнее о Joomla