Вопрос или проблема
На моем сервере CentOS7 установлена очень старая версия PHP (v7.2.10). Я пытаюсь обновить до PHP8, но у меня возникают серьезные проблемы. На моем сервере установлен PHP Version Switcher, и при попытке установить PHP8 я постоянно получаю ошибку.
Затем я попытался использовать yum
для установки PHP8. Он, кажется, установился нормально, но php -v
все равно возвращает 7.2.10. Я выполнил yum list installed | grep php
, и он вернул:
cwp-suphp.x86_64 0.7.2-3 @cwp
cwpphp.x86_64 7.2.30-3 @cwp
php.x86_64 8.0.30-6.el7.remi @remi-php80
php-cli.x86_64 8.0.30-6.el7.remi @remi-php80
php-common.x86_64 8.0.30-6.el7.remi @remi-php80
php-pdo.x86_64 8.0.30-6.el7.remi @remi-php80
php-pgsql.x86_64 8.0.30-6.el7.remi @remi-php80
php-sodium.x86_64 8.0.30-6.el7.remi @remi-php80
php72-php-common.x86_64 7.2.34-10.el7.remi @remi-safe
php72-php-json.x86_64 7.2.34-10.el7.remi @remi-safe
php72-php-pdo.x86_64 7.2.34-10.el7.remi @remi-safe
php72-php-pgsql.x86_64 7.2.34-10.el7.remi @remi-safe
php72-runtime.x86_64 2.0-1.el7.remi @remi-safe
Также выполнение rpm -q --filesbypkg php72-php-pdo-7.2.34-10.el7.remi.x86_64
и rpm -q --filesbypkg php-pdo-8.0.30-6.el7.remi.x86_64
возвращает:
php72-php-pdo /etc/opt/remi/php72/php.d/20-pdo.ini
php72-php-pdo /etc/opt/remi/php72/php.d/20-sqlite3.ini
php72-php-pdo /etc/opt/remi/php72/php.d/30-pdo_sqlite.ini
php72-php-pdo /opt/remi/php72/root/usr/lib64/php/modules/pdo.so
php72-php-pdo /opt/remi/php72/root/usr/lib64/php/modules/pdo_sqlite.so
php72-php-pdo /opt/remi/php72/root/usr/lib64/php/modules/sqlite3.so
php-pdo /etc/php-zts.d/20-pdo.ini
php-pdo /etc/php-zts.d/20-sqlite3.ini
php-pdo /etc/php-zts.d/30-pdo_sqlite.ini
php-pdo /etc/php.d/20-pdo.ini
php-pdo /etc/php.d/20-sqlite3.ini
php-pdo /etc/php.d/30-pdo_sqlite.ini
php-pdo /usr/lib64/php-zts/modules/pdo.so
php-pdo /usr/lib64/php-zts/modules/pdo_sqlite.so
php-pdo /usr/lib64/php-zts/modules/sqlite3.so
php-pdo /usr/lib64/php/modules/pdo.so
php-pdo /usr/lib64/php/modules/pdo_sqlite.so
php-pdo /usr/lib64/php/modules/sqlite3.so
Выполнение systemctl status cwp-phpfpm.service
возвращает:
● cwp-phpfpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/cwp-phpfpm.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2024-12-20 03:51:16 EST; 1 months 16 days ago
Main PID: 12524 (php-fpm)
CGroup: /system.slice/cwp-phpfpm.service
└─12524 php-fpm: master process (/usr/local/cwp/php71/etc/php-fpm.conf)
Так что кажется, что PHP 7.2 и 8.0 оба установлены. Как заставить CentOS использовать PHP8 вместо PHP7.2?
Ответ или решение
Чтобы обновить PHP до версии 8 на вашем сервере CentOS 7, необходимо выполнить ряд последовательных шагов, чтобы убедиться, что все компоненты правильно настроены. Из предоставленного вами описания видно, что на вашем сервере установлены обе версии PHP: 7.2.10 и 8.0. Цель состоит в том, чтобы настроить систему так, чтобы она использовала PHP 8 в качестве основной версии. Ниже приведены подробные инструкции по выполнению этой задачи.
Теория
Серверы CentOS часто управляются с помощью пакетного менеджера yum
, который позволяет устанавливать и обновлять пакеты программного обеспечения. При работе с PHP у вас может быть несколько установок разных версий PHP, каждая из которых могла быть установлена из разных репозиториев, таких как Remi, который вы используете для PHP 8. Важно понимать, что версии PHP могут работать параллельно, но только одна из них может быть установлена как система по умолчанию, которой управляет команда php
в консоли.
Пример
Ваша текущая проблема заключается в том, что, несмотря на установку PHP 8, команда php -v
по-прежнему возвращает версию 7.2.10. Это указывает на то, что в системе может использоваться неверный символический линк, указывающий на старую версию PHP.
Применение
-
Резервное копирование и проверка конфигурации:
Прежде чем вносить изменения, создайте резервные копии всех конфигурационных файлов, связанных с PHP и вашим веб-сервером, такими какphp.ini
и файлы конфигурации Apache или Nginx. Это поможет избежать потери важной конфигурации. -
Удаление старых символических ссылок:
Проверьте, куда указывает символическая ссылка для PHP в вашей системе. Используйте команду:ls -la /usr/bin/php
Если она указывает на старую версию PHP, удалите её:
sudo rm /usr/bin/php
-
Создание новой символической ссылки:
Найдите путь к бинарному файлу PHP 8 и создайте новую символическую ссылку:sudo ln -s /usr/bin/php8 /usr/bin/php
Убедитесь, что путь правильный. Вы можете найти текущий путь с помощью команды
which php8
. -
Проверка системных сервисов PHP:
Учитывая, что ваш сервер использует службуcwp-phpfpm
, важно, чтобы она была настроена на использование правильной версии PHP. Проверьте конфигурациюphp-fpm
:sudo systemctl edit cwp-phpfpm.service
Измените путь к конфигурационному файлу на тот, который использует PHP 8. Убедитесь, что используете файлы конфигурации для PHP 8.
-
Перезапуск сервисов:
Перезапустите все связанные службы, чтобы изменения вступили в силу:sudo systemctl restart cwp-phpfpm.service sudo systemctl restart httpd.service # или nginx, если вы используете его
-
Подтверждение установок:
После всех изменений выполните командуphp -v
снова, чтобы убедиться, что система теперь использует PHP 8. Также рекомендуется проверить работу вашего веб-сайта или приложений на новой версии PHP для проверки совместимости. -
Обновление расширений и конфигураций:
Убедитесь, что все расширения PHP также обновлены и настроены для работы с PHP 8. Выполните:yum list installed | grep php
Обратите внимание на наличие необходимых расширений и их совместимость.
Заключение
Использование разных версий PHP на одном сервере может быть сложным, особенно в случае, если необходимо переключаться между ними. Важно точно следовать инструкциям и убедиться, что все элементы системы правильно настроены для использования новой версии. Если вы столкнетесь с трудностями или неожиданностями, рекомендуется обратиться к документации PHP или поддержки сообщества для получения дополнительной помощи.