Как изменить версию PHP, используемую Apache2?

Вопрос или проблема

Ubuntu 10.04, MySQL 5.1, Apache 2.2 и PHP 5.2/5.3:

Я только что обнаружил, что использую неправильную версию PHP для CRM-приложения. Как только я понял, как создать простой скрипт phpinfo(), чтобы узнать, какую версию Apache2 я использую, я попробовал изменить php.ini так, чтобы мой веб-сервер использовал PHP, который мне нужен. Ну, это моя проблема. Не знаю, как это сделать.

Я скомпилировал версию PHP, которую хочу использовать, в /etc здесь:

/etc/php-5.2.8/

Внутри этого каталога был файл php.ini-recommended, в котором я внес некоторые изменения и переименовал его в php.ini, чтобы PHP использовал его. Но когда я открыл браузер, очистил историю и перешел по адресу http://localhost<CRM dir>/install.php, мастер установки все равно утверждает, что я использую неправильную версию PHP.

На основе этого поста что мне нужно сделать, чтобы изменить версию PHP, которая отображается после запуска моего скрипта test.php? Другими словами, phpinfo() говорит, что я использую PHP 5.3.2, но я хочу изменить его на мою скомпилированную версию 5.2.8, расположенную в /etc.

В зависимости от вашего сервера, вам следует посмотреть на Apache, а не на PHP.

(Для RHEL/CentOS) посмотрите /etc/httpd/conf.d/php.ini

#
# PHP это встроенный в HTML скриптовый язык, который пытается
# упростить разработку динамически генерируемых веб-страниц.
#
LoadModule php5_module modules/libphp5.so
#
# Заставляет интерпретатор PHP обрабатывать файлы с расширением .php.
#
AddHandler php5-script .php
AddType text/html .php

Вы увидите, что ваш PHP модуль это modules/libphp5.so.

AddHandler php5-script .php сообщает Apache запускать PHP для любого файла с расширением .php.

Если вы используете RPM-основанную ОС, вероятно, проще удалить (если вы можете это сделать) текущую версию PHP и переустановить версию, которую вы ищете.

rpm -qa | grep php

покажет вам, какая версия PHP в данный момент установлена.

Если вы уже установили другую версию PHP, вам просто нужно изменить php* модуль, используемый apache.

например, у меня есть php5 и php7.0. когда я хочу, чтобы apache использовал php7.0, мне просто нужно активировать его модуль и деактивировать модуль php5.

sudo a2dismod php5
sudo a2enmod php7.0

У меня была та же проблема, когда phpinfo() показывал версию 7.0, хотя я обновился до версии 7.3. И оказалось, что мне просто нужно было перезагрузить apache.

Я использовал sudo systemctl restart httpd на centos7

Существуют два основных метода установки новой версии PHP и указания Apache использовать ее: mod_php и php-fpm.

Примечание: Предпочтительный метод — это php-fpm, и многие новые дистрибутивы (включая Fedora) используют его по умолчанию.

Установка PHP в качестве модуля SAPI Apache

Здесь находится руководство по этому вопросу для Unix систем, из официальной документации. Оно имеет некоторые недочеты (по крайней мере, для моей настройки), поэтому я пройду через шаги:

  1. Соберите PHP из исходников. На шаге ./configure, используйте --with-apxs2. Это создаст для вас общий модуль обработчика Apache 2.

    Убедитесь, что у вас определена команда apxs в вашем пути или укажите ее путь как значение опции (например, --with-apxs2=/path/to/apxs).

    Например, если вы установили Apache на системном уровне и хотите установить эту команду также (например, в локальной среде), на Fedora и ее производных, вы можете установить ее, выполнив:

    sudo dnf install httpd-devel
    
  2. После завершения сборки (т.е. после make или make test), выполните make install (как root, возможно). Очевидно, это установит PHP в указанный вами путь (т.е. с помощью --prefix).

    То, что выполняется непосредственно перед установкой PHP, заключается в активации модуля SAPI apache2handler PHP благодаря опции --with-apxs2. Это подготавливает общий объект (например, в /usr/lib64/httpd/modules/libphp.so) и активирует модуль (например, в /etc/httpd/conf/httpd.conf), добавляя одну из следующих строк в файл конфигурации Apache в зависимости от версии PHP, которую вы установили (строка вставляется под секцией “Поддержка динамически подключаемых объектов (DSO)”):

    # В случае PHP8
    LoadModule php_module           /usr/lib64/httpd/modules/libphp.so
    
    # В случае PHP7
    LoadModule php7_module          /usr/lib64/httpd/modules/libphp.so
    

    Примечание: При переключении версий PHP, особенно основных, имейте в виду, чтобы проверить, что есть только один из этих LoadModule для PHP, иначе сервер Apache может отказать в запуске.

Установка PHP как PHP-FPM (FastCGI Process Manager)

Необходимость для документирования. 🙂

Заключительные шаги

Дополнительный шаг для PHP 8.0 и выше

Если ваша дистрибуция еще не поддерживает PHP8 (например, Fedora 34) и вы установили Apache2 из менеджера пакетов, вам следует выполнить еще один шаг.

Проблема заключается в том, что начиная с PHP 8.0, Apache2 использует другие идентификаторы для модулей SAPI, чем раньше. Эти идентификаторы используются для определения, используете ли вы mod_php или php-fpm в файлах конфигурации. Для PHP5 это был php5_module и mod_php5; для PHP7 это php7_module и mod_php7, а для PHP8 это php_module и mod_php.

В этом случае перейдите в каталог конфигурации Apache2 (например, /etc/httpd) и начните редактировать файл conf.d/php.conf. Существует две секции IfModule: Одна для активации php-fpm, если вы не используете mod_php, и другая для активации mod_php, если вы его используете (т.е. используете LoadModule где-то в конфигурациях). Вам следует обновить эти условия, чтобы охватить также PHP8.

Например, рассмотрите следующее:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Включить конфигурацию PHP-FPM
  </IfModule>
</IfModule>

Вам следует окружить основную конфигурацию еще одной секцией IfModule следующим образом:

    <IfModule !mod_php.c>
      # Включить конфигурацию PHP-FPM
    </IfModule>

И выполните то же самое для секции конфигурации включения mod_php.

Последний шаг

Перезапустите сервис Apache:

service httpd restart

Теперь phpinfo() должен показать вам новую установленную версию PHP. Теперь можно радоваться. 🙂

Это довольно просто, просто выполните следующие действия:
1) Остановите Apache;
2) Внизу файла, например

C:\Apache24\conf\httpd.conf  

добавьте или измените эти строки:

# Модуль PHP8
PHPIniDir "C:/php"
LoadModule php_module "C:/php/php8apache2_4.dll"
AddType application/x-httpd-php .php

Сохраните файл и проверьте его, выполнит

httpd -t

Теперь запустите Apache с помощью

httpd -k start

Ответ или решение

Чтобы изменить версию PHP, которую использует Apache2 на вашем сервере Ubuntu 10.04 с MySQL 5.1, Apache 2.2, и PHP 5.2/5.3, необходимо следовать определенным шагам, которые обеспечат корректную работу нужной версии PHP с вашим веб-сервером. Используемая konfiguratsi это модульная конфигурация Apache, и ее настройки определяют версию PHP, с которой работает сервер.

Теория

Apache может взаимодействовать с PHP через два основных метода: модуль mod_php и php-fpm (FastCGI Process Manager). В вашем случае, вероятно, используется mod_php, поскольку это наиболее распространенный метод для более старых версий Ubuntu и Apache. mod_php позволяет PHP работать непосредственно в контексте Apache, что упрощает конфигурацию, но может быть менее эффективным с точки зрения ресурсов, особенно при высокой нагрузке.

Пример

Проблема заключается в том, что ваш текущий Apache конфигурирован на использование PHP 5.3.2, а не вашей вручную собранной версии PHP 5.2.8 расположенной в /etc/php-5.2.8/. Чтобы изменить это, вам нужно убедиться, что Apache загружает нужный модуль PHP.

Применение

  1. Убедитесь, что у вас установлены нужные библиотеки и инструменты:

    • Заранее убедитесь, что у вас установлены все необходимые зависимости. Например, для работы с модулем apxs вам может понадобиться пакет apache2-dev:
      sudo apt-get install apache2-dev
  2. Смените загружаемый модуль PHP:

    • Предположим, модуль php5_module или подобный для PHP 5.3.2 где-то активирован. Откройте файл конфигурации Apache, который по умолчанию может находиться в /etc/apache2/apache2.conf или /etc/apache2/conf-enabled/php5.conf.
    • Найдите строку, начинающуюся с LoadModule php5_module и замените ее на вашу новую установленную версию, вернув команду для загрузки новой версии PHP:
      LoadModule php5_module /path/to/your/compiled/php-5.2.8/libphp5.so
    • Особое внимание стоит уделить катaлогу, в котором находится файл libphp5.so. При сборке PHP с apxs2, вы должны были указать его с помощью опции --with-apxs2, например:
      ./configure --with-apxs2=/usr/bin/apxs2
  3. ПерезапускаApacheчтобыизменениявступилизнусилу:

    • После изменения конфигурации не забудьте перезапустить Apache, чтобы он загрузил новый модуль PHP:
      sudo systemctl restart apache2
    • Если ваша система не использует systemctl, замените это командой:
      sudo service apache2 restart
  4. Проверка изменений:

    • Для проверки того, что
Оцените материал
Добавить комментарий

Капча загружается...