我正在使用 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
要安装php
,yum
也会安装旧版本的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-mcrypt
7.3 的 SCL 版本,因此您可能需要找到一种方法来自行构建该版本。然而,这是在 PHP 7.1 中标记为已弃用,并且应该是在 7.2 中从 PHP 核心中删除,所以这可能是可以预料到的。 PHP 项目推荐以下替代方案:
安装完所有内容后,您会发现配置文件不在其通常的位置。这是因为 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 时编译新版本。如果新版本破坏了您的网站,您必须找出原因并更新您的代码。这是很多工作。