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

Как изменить версию 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.

решение1

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

(Для RHEL/CentOS) см./etc/httpd/conf.d/php.ini

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated web pages.
#
LoadModule php5_module modules/libphp5.so
#
# Causes the PHP interpreter to handle files with a .php extension.
#
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 установлена ​​в данный момент.

решение2

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

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

sudo a2dismod php5
sudo a2enmod php7.0

решение3

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

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

Установить PHP как модуль Apache SAPI

Здесьэто руководство по этому для систем 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, так это, из-за --with-apxs2опции, установка модуля PHP apache2handler SAPI. Он подготавливает общий объект (например, в /usr/lib64/httpd/modules/libphp.so), и активирует модуль (например, в /etc/httpd/conf/httpd.conf), добавляя одну из следующих строк в файл конфигурации Apache, в зависимости от установленной версии PHP (строка вставляется под разделом "Поддержка динамических общих объектов (DSO)"):

    # In the case of PHP8
    LoadModule php_module           /usr/lib64/httpd/modules/libphp.so
    
    # In the case of PHP7
    LoadModule php7_module          /usr/lib64/httpd/modules/libphp.so
    

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

Установить PHP как PHP-FPM (менеджер процессов FastCGI)

Будет уточнено. :)

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

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>
    # Enable PHP-FPM configuration
  </IfModule>
</IfModule>

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

    <IfModule !mod_php.c>
      # Enable PHP-FPM configuration
    </IfModule>

То же самое проделайте mod_phpи для раздела конфигурации активатора.

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

Перезапустите службу Apache:

service httpd restart

Теперь, phpinfo()должен показать вам новую версию PHP, которую вы только что установили. Теперь вы должны быть счастливы. :)

решение4

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

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

Связанный контент