Ubuntu 10.04、MySQL 5.1、Apache 2.2 和 PHP 5.2/5.3:
我刚刚发现我在 CRM 应用程序中使用的 PHP 版本不对。我弄清楚如何编写一个简单的phpinfo()
脚本来告诉我 Apache2 正在使用什么版本后,我尝试进行更改,php.ini
以便我的 Web 服务器可以使用我想要的 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,则只需要更改apache使用的php*模块。
例如我有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
),方法是根据您安装的 PHP 版本,将以下其中一行添加到 Apache 配置文件中(该行插入到“动态共享对象 (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
或。对于 PHP5,它是和;对于 PHP7,它是和,而对于 PHP8,它是和。php-fpm
php5_module
mod_php5
php7_module
mod_php7
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
我遇到了同样的问题,即使我已升级到 7.3 版,phpinfo() 仍会显示版本 7.0。结果我只需要重启 Apache。
我sudo systemctl restart httpd
在centos7上使用