PHP 升级失败,CentOS 6.7

PHP 升级失败,CentOS 6.7

系统信息

操作系统 CentOS Linux 6.7

内核和 CPU x86_64 上的 Linux 2.6.32-042stab108.1

yum repolist enabled

只有我手动添加的

  • 基础 - CentOS-6 -
  • 基本 epel - Enterprise Linux 6 的附加软件包 - x86_64
  • 附加功能 - CentOS-6 - 附加功能
  • ius - 适用于企业版 Linux 6 的 IUS 社区软件包 - x86_64
  • mod-pagespeed - mod-pagespeed
  • remi-safe - 适用于 Enterprise Linux 6 的安全 Remi RPM 存储库 - x86_64
  • rhscl-php55-epel-6-x86_64 - PHP 5.5.21 -
  • epel-6-x86_64 更新 - CentOS-6 - 更新
  • virtualmin - RHEL/CentOS/Scientific 6 - x86_64 -
  • Virtualmin virtualmin-universal - Virtualmin 分布中性
  • 软件包 vz-base - vz-base vz-updates - vz-updates

可用的已安装版本

  • /usr/bin/php5.3.3
  • /usr/bin/php555.5.30

我尝试了以下操作(使用 virtualmin)

  1. 为特定目录启用了 5.5.30,但没有成功,从 virtualmin 收到此错误该虚拟服务器使用 PHP 的 mod_php 执行模式,因此不允许按目录选择版本。
  2. 启用目录特定版本home/<domain>/domains/<subdomain>.<domain>.com/public_html/public,并phpinfo(); returns 5.3.3 version
  3. 由于尝试yum replace php-common --replace-with=php55-php-common放入了太多包裹WARNING: Unable to resolve all providers所以没有继续。
  4. 尝试删除版本 5.3,但其他 php 代码崩溃,所以我犹豫是否要替换该版本
  5. 浏览网络寻找答案,结果发现我读到的一半以上的东西都是坏的,存储库已过时或与其他软件包冲突,当我尝试yum upgrade php

有人能帮助解决这个令人沮丧的情况吗?我真的认为安装另一个版本并为目录启用它可以解决这个问题。

答案1

我们建议您使用 SCL 版本的软件包,这样 PHP 版本就可以和平共处,不会引起您遇到的冲突。我在 Virtualmin 下的新服务器上运行了 Remi 的 PHP 5.6.15 软件包,它运行良好(我确实不得不调整 php-lib.pl 中的检测代码,尽管几天后新的 Virtualmin 发布时就不需要这样做了)。

另外,你应该使用 fcgid 执行模式,并且不是mod_php。mod_php 只能在单个 Apache 实例中以一个版本存在,并且永远不会与多个版本一起工作。fcgid 是使用 install.sh 安装的 Virtualmin 系统中的默认执行模式,但它可以在系统设置:服务器模板:模板名称:Apache 网站中配置。“默认 PHP 执行模式”是您想要的选项,而 FCGId 是使用多个 PHP 版本的正确值(以及出于各种其他好的理由)。

Virtualmin 的当前版本还不支持所有的 SCL PHP 包,但是下一个版本将轻松处理任意版本(并且可能能够查询 SCL 命令以确定您喜欢的 PHP 版本;我不知道其中有多少已经实现)。

由于 SCL 获得了更多 PHP 版本,并且 Virtualmin 对 SCL 包的支持得到了扩展,过去几周在我们的论坛上对这个主题进行了大量讨论。

这里有一些文档(我不确定 Eric 是否已经更新,以解决 SCL 中的最新变化,但如果还没有更新的话,他们很快就会更新):

http://www.virtualmin.com/documentation/web/multiplephp

答案2

请注意,Apache 无法管理 PHP 的各个版本(使用 mod_php),因此您只能安装“php”或“php55-php”

要在 Apache HTTPD 服务器中启用不同版本的 PHP,您需要使用“FPM”。

使用 Apache 2.2(在 CentOS 6.x 中),您必须使用 mod_proxy_fastcgi(在 EPEL 中可用,从 2.4 反向移植)和 ProxyPass 指令。

使用 Apache 2.4(在 CentOS 7.x 中)更简单,它支持将 SetHandler 设置为 fastcgi 代理。

以下为一些示例:

相关内容