Как переключаться между несколькими версиями PHP в Ubuntu 22.04

При работе над программным обеспечением, которое будет использоваться в разных серверах, крайне важно проверить обратную совместимость с разными версиями PHP. На данный момент, самой популярной версией PHP является 7.4. Каждый год выходит новая версия PHP. При этом одна версия PHP устаревает в конце каждого года. PHP 7.4 устареет в конце 2023 года. Это означает, что все новое программное обеспечение должно быть тщательно протестировано с более новыми версиями PHP, например PHP 8, PHP 8.1 и PHP 8.2. В то же время, по разным причинам, некоторые пользователи используют более старые версии PHP, например, php7.0, php7.1 и даже php5.6. Будучи автором тем и плагинов WordPress, для меня очень важно не оставлять пользователей позади, поэтому мы с моей командой всегда стараемся создавать продукты с надежной обратной совместимостью. Это может потребовать дополнительных усилий, но в большинстве случаев это того стоит, если не слишком затруднительно, конечно.

HostArmada Affordable Cloud SSD Shared Hosting

Переключение между разными версиями PHP

Я допускаю, что вы тестируете приложение PHP в стеке LAMP, развернутом в Ubuntu 22.04. Прежде чем переключать версии PHP, убедитесь, что у вас установлены необходимые версии php, выполнив в терминале следующую команду:

sudo update-alternatives --list php

Загрузите и установите недостающие версии PHP

Пропустите этот шаг, если приведенная выше команда показывает, что у вас есть необходимая версия PHP.

Представим, что вы хотите обновить системную версию PHP до php7.2. Если вы видите, что версия PHP, на которую вы хотите переключиться, отсутствует, загрузите и установите ее:

sudo apt install php7.2

Замените php7.2 на целевую версию PHP, которую вы хотите обновить или понизить. Скорее всего, вам потребуются дополнительные модули. Если вы используете WordPress, вам, вероятно, тоже нужны следующие модули PHP:

sudo apt install php7.2-common php7.2-cli php7.2-json php7.2-xml php7.2-opcache php7.2-mysql php7.2-mbstring php7.2-zip php7.2-fpm

Переключитесь на желаемую версию PHP

Используйте команду update-alternatives, чтобы установить желаемую версию PHP по умолчанию. Замените «7.2» на версию, которую вы хотите обновить (например, «8.0»):

sudo update-alternatives --set php /usr/bin/php7.2

Нам нужно выполнить несколько дополнительных команд:

sudo update-alternatives --set phar /usr/bin/phar7.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
sudo update-alternatives --set phpize /usr/bin/phpize7.2
sudo update-alternatives --set php-config /usr/bin/php-config7.2

Наконец, в контексте стека LAMP вам надо тоже перезапустить веб-сервер Apache:

sudo service apache2 restart

Теперь проверьте изменения, выполните следующую команду:

php -v

В большинстве случаев это работает, но иногда недостаточно изменить версию PHP в контексте стека LAMP. Чтобы быть абсолютно уверенным, что вы успешно изменили версию php в стеке LAMP, я бы рекомендовал создать файл phpinfo.php и добавить в него код: <?php phpinfo(); внутри него. Поместите файл в корневую папку вашего сервера и откройте его, запустив https://mydomain.com/phpinfo.php в браузере. (Не забудьте удалить этот файл сразу после теста, так как он представляет угрозу безопасности). Если отображается php7.2, значит вы успешно обновили версию php, и вам больше не нужно читать эту статью.

HostArmada Affordable Cloud SSD Shared Hosting

Интеграция LAMP

В некоторых случаях приведенных выше команд недостаточно для перехода на нужную версию PHP. Иногда это происходит из-за конфликтов зависимостей, конфигурации веб-сервера, ограничений альтернатив обновления и других. В стеке LAMP я считаю хорошей практикой запускать и эти команды:

sudo a2dismod php7.4
sudo a2enmod php7.2
sudo systemctl start php7.2-fpm
sudo systemctl enable php7.2-fpm
sudo a2disconf php7.4-fpm
sudo service apache2 restart

Эти команды обеспечивают не только переключение версии PHP, но и правильную интеграцию с веб-сервером Apache. Замените php7.4 вашей текущей версией PHP, а php7.2 — вашей целевой версией PHP.

Бонус: создайте сценарий оболочки/shell scripts/шелл-скрипт.

Мы рассмотрели широкий спектр аспектов конфигурации и зависимостей, чтобы успешно изменить PHP на нужную версию. Наконец, я бы рекомендовал создать сценарий оболочки, который запускается один раз и вам не надо выполнять эти команды одну за другой. Откройте текстовый редактор Gedit или nano и поместите приведенные выше команды в файл с расширением .sh. После этого выполните его, запустив через терминал: ./myphpversion.sh

Мы узнали, как поменять версии PHP на сервере LAMP в Ubuntu. Процесс не из лёгких, но, надеюсь, эти команды помогут вам и вашим коллегам и сделают процесс разработки менее утомительным и более увлекательным.