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, из официальной документации. В нем есть некоторые пропущенные моменты (по крайней мере для моей настройки), поэтому я прохожу по шагам:
Соберите 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, так это, из-за
--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