Вопрос или проблема
Я занимаюсь разработкой PHP на локальном хосте и использую update-alternatives для переключения между версиями PHP, а именно 7.4 и 8.2 в моем случае. Это работает нормально … ЗА ИСКЛЮЧЕНИЕМ …
, когда apache отображает результаты phpinfo() в браузере, версия всегда 7.4, даже если я только что переключился на 8.2 с помощью update-alternatives и проверил, что php -v в bash дает мне 8.2.
Я полагаю, это так потому, что версия php, которую использует apache2, определяется ссылками в /etc/apache2/mods-enabled, и ссылки там php7.4.conf и php7.4.load, то есть они не изменяются с помощью update-alternatives, чтобы отразить текущую активную версию PHP в системе.
Я думаю, update-alternatives должен обновлять их, когда пользователь выбирает версию PHP. Может кто-нибудь подсказать, как добавить запрос на изменение update-alternatives, чтобы отразить это?
Вам нужна 1 дополнительная строка в ваших командах. Чтобы переключить PHP для Apache:
sudo a2dismod php7.4
sudo a2enmod php8.2
sudo update-alternatives --set php /usr/bin/php8.2
sudo service apache2 restart
Замените 8.2 на 7.4, если хотите сделать обратное переключение.
Возможно, лучше создать для этого скрипт.
Ответ или решение
Проблематика управления версиями PHP на локальном сервере, особенно в контексте использования системы update-alternatives, представляет собой важную тему для разработчиков. Часто возникает диссонанс между версиями PHP, которые видны при вызове php -v в командной строке, и теми, которые отображает Apache, делая ситуацию особенно запутанной.
Проблема
Вы, как IT-специалист, столкнулись с ситуацией, когда использование update-alternatives для переключения между версиями PHP на вашем localhost не изменяет конфигурацию Apache. В результате Apache продолжает использовать старую версию PHP, несмотря на изменение в командной строке. Это связано с тем, что апачи использует модули, находящиеся в /etc/apache2/mods-enabled, и, например, модули php7.4.conf и php7.4.load остаются не измененными системой update-alternatives, когда вы меняете версию PHP.
Решение
Выявленная проблема указывает на необходимость деактивации старых и активации новых модулей Apache при изменении версии PHP. Это можно выполнить с помощью следующих команд:
sudo a2dismod php7.4
sudo a2enmod php8.2
sudo update-alternatives --set php /usr/bin/php8.2
sudo service apache2 restart
Этот процесс требует ручного вмешательства и следования пошаговой инструкции для корректного функционирования Apache с новой версией PHP.
Рекомендации
- Автоматизация: Создание скрипта, который выполнит вышеупомянутые команды автоматически, значительно облегчит процесс переключения между версиями PHP.
- Обратная связь: Для улучшения функционала update-alternatives, стоит соответствующим образом обратиться к их команде разработки. Это можно сделать через платформы разработки ПО, такие как GitHub или Launchpad, где обсуждаются функциональные улучшения и запросы пользователей.
Заключение
Поддержание согласованности между используемой версией PHP на уровне системы и веб-сервера имеет критическую важность для разработчиков. Адекватное использование update-alternatives в сочетании с автоматизацией замены версий через Apache обеспечит эффективную работу PHP-аппликаций. Создание скрипта и взаимодействие с сообществом разработчиков помогут оптимизировать этот процесс.
Это решение не только решает актуальную задачу, но и улучшает вашу продуктивность как разработчика, позволяя сосредоточиться на создании кода, а не на управлении инфраструктурой.