如何更改 Apache2 使用的 PHP 版本?

如何更改 Apache2 使用的 PHP 版本?

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_phpphp-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),方法是根据您安装的 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 版本(特别是主要版本)时,请记住检查是否只有一个LoadModulePHP 可用,否则 Apache 服务器将拒绝启动。

将 PHP 安装为 PHP-FPM(FastCGI 进程管理器)

有待确定。:)

最后步骤

PHP 8.0 及以上额外步骤

如果您的发行版尚不支持 PHP8(例如 Fedora 34)并且您从包管理器安装了 Apache2,那么您应该再执行一步。

问题是,从 PHP 8.0 开始,Apache2 对 SAPI 模块使用的标识符与以前不同。这些标识符用于检测您在配置文件中是否使用mod_php或。对于 PHP5,它是和;对于 PHP7,它是和,而对于 PHP8,它是和。php-fpmphp5_modulemod_php5php7_modulemod_php7php_modulemod_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上使用

相关内容