如何在已预装 Apache HTTPD 的 CentOS 上安装 PHP?

如何在已预装 Apache HTTPD 的 CentOS 上安装 PHP?

我正在使用 CentOS 7。我想安装 PHP 7,所以我使用了remi-php(最新的 PHP 版本yum是 5.4)。由于HTTPD版本yum太旧,所以我从源码中编译了最新的HTTPD版本。

然而,当我尝试remi-php使用以下命令进行安装时,HTTPD 编译非常顺利:

yum --enablerepo=remi-php71 install php php-cli php-intl php-mbstring php-mcrypt php-mysqlnd

要安装phpyum也会安装旧版本的httpd(虽然我已经编译并使用了最新的HTTPD版本)。如果我继续安装,我的 HTTPD 将抛出一个错误(并且不会启动),但如果我不继续安装,我将不会获得该php*.so文件,并且 apache 也不会解析这些.php文件。

那么,如何安装php才能不影响之前编译好的Apache HTTPD呢?我不希望我的服务器同时有两个 Apache HTTPD 实例,这样将来可能会出现问题。

您给出的答案将对我非常有帮助。

我会很感激你的回答。

答案1

我建议使用软件合集(SCL)代替。它提供受支持的 PHP 版本(最高 7.3)和 HTTPd (2.4),至少在 CentOS 7 于 2024 年终止生命之前。首先,安装 SCL 的存储库:

yum install centos-release-scl centos-release-scl-rh

然后您可以安装 PHP 和 HTTPd 的 SCL 版本:

yum install httpd24 rh-php73

这将引入所需的基本依赖项。要安装下面提到的其他 PHP 模块,包名称将带有前缀rh-php73

yum install rh-php73-php-cli rh-php73-php-intl rh-php73-php-mbstring rh-php73-php-mysqlnd

我无法找到php-mcrypt7.3 的 SCL 版本,因此您可能需要找到一种方法来自行构建该版本。然而,这是在 PHP 7.1 中标记为已弃用,并且应该是在 7.2 中从 PHP 核心中删除,所以这可能是可以预料到的。 PHP 项目推荐以下替代方案:

  • 使用开放式SSL。对此提供了支持rh-php73-php-common,它将作为依赖项自动安装。
  • 使用。这需要一个额外的包,sclo-php73-php-sodium.

安装完所有内容后,您会发现配置文件不在其通常的位置。这是因为 SCL 软件包被设计为允许与主软件包并行安装。

默认路径 SCL路径
/etc/httpd /opt/rh/httpd/root/etc/httpd
/etc/php.ini /etc/opt/rh/rh-php73/php.ini
/etc/php.d /etc/opt/rh/rh-php73/php.d
/var/log/httpd /var/log/httpd24

当您准备好启动 HTTPd 时,该服务也会以不同的方式命名:

systemctl --now enable httpd24-httpd.service

最后,关于版本号,请记住,CentOS 7 中的几乎所有内容都直接源自 RHEL 7。尽管版本号本身可能稍微过时,但更高版本的补丁经常会向后移植到其中。其想法是保持 ABI 稳定性,同时仍然提供必要的错误和安全修复。

答案2

您要么必须像使用 Apache HTTPd 那样编译自己的 PHP,要么使用 Centos7 中的打包版本(它与 Remi 的 php7 软件包配合得很好)。

在 yum 之外安装随机的东西不会通知包数据库。您可以为新的 httpd 创建一个包,但我真的建议您在 CentOS 中使用 httpd,因为它仍然应该获得严格的安全更新。

请记住,您现在编译的任何内容都将成为您的责任,您必须跟踪漏洞并在每次出现新的 CVE 时编译新版本。如果新版本破坏了您的网站,您必须找出原因并更新您的代码。这是很多工作。

相关内容