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