Вопрос или проблема
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 систем, из официальной документации. Оно имеет некоторые недочеты (по крайней мере, для моей настройки), поэтому я пройду через шаги:
-
Соберите PHP из исходников. На шаге
./configure
, используйте--with-apxs2
. Это создаст для вас общий модуль обработчика Apache 2.Убедитесь, что у вас определена команда
apxs
в вашем пути или укажите ее путь как значение опции (например,--with-apxs2=/path/to/apxs
).Например, если вы установили Apache на системном уровне и хотите установить эту команду также (например, в локальной среде), на Fedora и ее производных, вы можете установить ее, выполнив:
sudo dnf install httpd-devel
-
После завершения сборки (т.е. после
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.
Применение
-
Убедитесь, что у вас установлены нужные библиотеки и инструменты:
- Заранее убедитесь, что у вас установлены все необходимые зависимости. Например, для работы с модулем
apxs
вам может понадобиться пакетapache2-dev
:sudo apt-get install apache2-dev
- Заранее убедитесь, что у вас установлены все необходимые зависимости. Например, для работы с модулем
-
Смените загружаемый модуль 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
- Предположим, модуль
-
ПерезапускаApacheчтобыизменениявступилизнусилу:
- После изменения конфигурации не забудьте перезапустить Apache, чтобы он загрузил новый модуль PHP:
sudo systemctl restart apache2
- Если ваша система не использует
systemctl
, замените это командой:sudo service apache2 restart
- После изменения конфигурации не забудьте перезапустить Apache, чтобы он загрузил новый модуль PHP:
-
Проверка изменений:
- Для проверки того, что