Бортовой журнал. Бортовой журнал Переход с php 5 на 7


Обязательно ли переходить на 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

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

Найти: function Plugin_googleMaps

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

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

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

4. YT Framework Render XML

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

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

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

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

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

Найти: функция 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". Не сильно, и если ваш сайт правильно защищен (читайте на нашем специализированном сайте - https://joomlahealth.ru), то прекрасно и безопасно будет работать и на старых версиях Joomla и на старых версиях php.

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

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

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

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

PHP 7 лучше

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

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+.

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

Несколько дней назад я переключил свой сервер с порядка 30-ти сайтами на PHP 7. Некоторые из них были достаточно старыми и составляли широкий набор с различных фреймворков и CMS. Вот несколько советов для тех кто еще не решил переходить на PHP 7 или нет.

Начнем с того что я понимаю что есть много людей которые не считают стабильную версию действительно «стабильной» пока она чуть-чуть не повзрослела, ожидая что еще найдутся какие-то баги или несовместимости. С того что я пока видел, пробуя каждый release candidate как только он выходил, совсем безопасно переключиться на PHP 7 как только он выйдет. Я ни разу не заметил какого-то непонятного поведения или вылета которому виной не был бы я сам. Несмотря на то что это новая версия она не несет много несовместимых изменений, то есть по большому счету можете относиться к ней как к просто PHP 5.7 только существенно быстрее.

И скорость действительно впечатляет, даже невероятно как. Для примера простой сайт на PHPixie заработал почти в три раза быстрее практически сравнившись со скоростью Phalcon на PHP 5.6, несколько сайтов на Wordpress показали стабильный прирост в скорости в два раза. Если учесть недавний отчет от Google что потеря даже 10% производительности загрузки страниц приводит к ощутимой потери клиентов, то если вы можете запросто ускорить работу сайта в два раза просто обновив PHP вы получаете больше продаж ничего не потратив. Вспомните об этом, когда будете убеждать своего менеджера перейти на PHP 7. Ничего не убеждает лучше, чем объем продаж.

Несколько замечаний

Расширение mysql больше недоступно, так что если вы еще не перешли на PDO или mysqli то теперь уж точно придется. Благо во многих случаях достаточно просто заменить вызовы к mysql_ функциям на mysqli_ .

E_STRICT ошибки реклассифицированы как другие типы ошибок. Если раньше вы их прятали или игнорировали, то теперь они начнут всплывать вместе с другими. Например, вызов нестатических методов статически теперь выбрасывает E_DEPRECATED что создало кучу проблем с Joomla 2.5 который почему-то делает это довольно часто. Также несовместимое наследование теперь классифицируется как E_WARNING . Wordpress уже с февраля тестируется на работу с PHP 7, так что с ним самим проблем никаких нет, правда, несколько плагинов таки оказались несовместимыми.

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

Теперь $foo->$bar["baz"] интерпретируется как ($foo->$bar)["baz"] а не $foo->{$bar["baz"]} как в PHP 5. Это редкий случай, но тоже попалось в одном из плагинов, и как оказалось в Magento 1.x (core/Mage/Core/Model/Layout.php ).

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

В сумме мне заняло около 5 часов чтобы перевести все сайты на PHP 7. Процесс совсем нетрудный и пакеты доступны уже для всех популярных дистрибутивов. Так что даже если вы собираетесь ждать стабильного релиза (уже совсем недолго), нет никакой причины не приготовить свои сайты к миграции наперед.

Стоит ли переходить на новую версию PHP 7.0 ? – Однозначно стоит, даже не думайте - переходите!

В седьмой версии достаточно много нововведений. Основные из них:

  • в основе ядра PHP 7 используется PHPNG . Новое ядро дает прирост производительности сайтам от 40%;
  • type Hints и возвращаемые значения . Теперь при объявлении функции для каждой переменной можно указывать свой тип, а также тип данных, который вернет функция. Доступные типы: int , float , string и bool ;
  • комбинированный оператор сравнения и многое другое.

В PHP 7 были удалены некоторые расширения:

  • mysql

Уже в PHP 5.6.x использование этих расширений было нежелательным. Вместо «mysql» следует использовать «PDO», а вместо ereg → preg .

Более детально ознакомиться с новинками PHP 7 можно на официальной странице

Стоит ли переходить на PHP 7?

На данный момент самое простое, что вы можете сделать для увеличения производительности сайта, это перейти на PHP 7.0.x. Прирост скорости также зависит от того, как написан ваш проект. Если вы еще сомневаетесь, покажем некоторые сравнения:

Бенчмарки PHP 5.6 vs PHP 7 для нектоторых фреймфорков (Zend framework, Magento, Drupal, Mediawiki, WordPress, Laravel, SugarCRM и др):

По всем фреймворкам прирост производительности значительный. Давайте посмотрим, как обстоит дело с функциями и конструкциями ядра:

Бенчмарки PHP 5.6 vs PHP 7 для функций и конструкций ядра:

Если графики вас убедили, можно попробовать перенести свой сайт на новую версию PHP и ощутить прирост на реальном проекте.

Коллеги с Elasticweb рассказали, что перед запуском нового сервера с PHP 7 они запустили на нем крупный государственный проект, работающий на Laravel 5. Это был своеобразный тест производительности новой версии PHP и сервера в целом. Ранее этот проект был на сервере с PHP 5.6. После переноса сайта страницы начали открываться значительно быстрее, при этом использование ресурсов сократилось вдвое.

Для подготовки переезда на PHP 7 они использовали PHP 7 Migration Assistant Report (MAR) . Большинство популярных CMS/Framework уже обладают совместимостью с PHP 7, поэтому основная задача сводилась к тестированию custom плагинов.

WordPress 4, Drupal 8/7 и последняя версия Joomla уже готовы к PHP 7!

Добрый день уважаемые читатели и подписчики, наверняка многие из вас слышали информацию, о том, что поисковая система Google прилагает огромные усилия, для перевода всех сайтов в интернете на безопасное соединение https, за счет установки сертификатов шифрования для веб сайтов , предлагая вебмастерам получить бонусы в поисковой выдаче, при прочих равных. Вот и я всерьез задумался над этой задачей, планируя осуществить переезд сайта в летнее время, но перед этим делом я должен все подготовить и одной из ступеней подготовки я для себя поставил, переход с php 5 на php 7, на своем хостинге mchost.ru

Для чего мне переход с php 5 на php 7

На это меня натолкнуло две вещи:

  • Я получаю больше функциональных возможностей от php 7
  • Я уменьшаю нагрузку на свои ресурсы и уменьшая количество запросов, тем самым увеличивая скорость загрузки сайта, очень сейчас актуально для мобильной поисковой выдачи, процент которой уже перевалил за 50 процентов.

Я вам уже описывал в статье, как мой сайт загибался от нагрузки парсинга не него, и техническая поддержка, после решения проблем, так же порекомендовала, при поддержке сайтом php 7, перейти именно на нее. Тесты сравнения производительности php 5 и php 7 , смотрите по ссылке.

Смена версии php

Так как у меня VPS хостинг на mchost, то это делается очень просто. Заходим в личный кабинет, по адресу https://cp.mchost.ru/login.php. Далее как любой нормальный человек, вы должны сделать резервную копию сайта. Заходим в пункт резервные копии, выбираем сайт и создаем.

Следующим шагом, вы выбираете пункт сайты. Находите среди них нужный и нажимаете Настройки php.

В пункте php для домена, у вас отобразится список возможных версий, на текущий момент самой последней является FastCGI PHP 7.1

Начнется процесс перехода с php 5 на php 7, в справа у вас будет прогресс бар.

как видите, до изменения версии, у меня это 5.4.45

Смотрим теперь 7.1

Хочу отметить, что сам перевод между версиями, может занять до 15 минут, так, что лучше это действие отложить на вечернее время

Если кстати хотите получить 3 месяца халявы от данного хостинга, то щелкайте по баннеру ниже и вводите промокод 48C4-D018-AC60-50C6

После того как вы перевели сайт на свежую версию, проверьте весь функционал вашего ресурса, все ли работает и отображается корректно, если нет у вас два выхода, 1 это откатиться, второй это доработать сайт.

Возможные проблемы

Бывают случаи, что вы получаете ошибку: Ошибка установки соединения с базой данных

Решается она просто, вам нужно обновить пароль на базу данных, в личном кабинете. Выбираем пункт Базы данных и щелкаем по нужной (редактировать)

Задаем заново пароль.

Если например вы не помните пароль от нее и у вас движок сайта, как и у меня WordPress, то можно подключить к ftp серверу и найти в корне сайта файл wp-config.php

Откройте его и найдите поле (Пароль к базе данных MySQL)

Если у вас возникают,еще какие то проблемы, то пишите о них в комментариях и мы попробуем решить их вместе. Так, что не поленитесь проделать данную задачу, важно использовать все возможности свежего программного обеспечения, тем более, вы еще бонусом получаете меньшую нагрузку на хостинг и большую скорость работы вашего ресурса.