在干净的 Amazon Linux AMI 上安装 PHP

在干净的 Amazon Linux AMI 上安装 PHP

我正在尝试让一个脚本运行起来,以便使用 php55 和 Amazon PHP sdk 启动新的 Amazon Linux EC2 实例。但是,我遇到了一个问题,我认为该问题是由 PHP 版本冲突引起的。我认为我错过了一些有关 yum 在这种情况下如何工作的信息。

归结为最简单的情况,如果我运行:

yum install -y httpd24 php55 php-amazon-sdk2

我得到了“错误:php55-common 与 php-common-5.3.29-1.7.amzn1.x86_64 冲突

但是,如果我运行:

yum install -y httpd24 php55

然后单独运行:

yum install -y php-amazon-sdk2

它运行得很好。需要说明的是,当我运行这些命令时,系统中根本没有 PHP 版本,因此它不会与已经存在的版本发生冲突。

我不太了解 yum 依赖项的工作原理,但这似乎表明 php-amazon-sdk2 适用于 php55,但由于某种原因,如果我同时安装它们,它会尝试强制使用 php53。恰当的解决这个问题的方法(意思是,我不想强​​制安装,忽略依赖关系,但我也不想分步骤执行这些操作)?

答案1

这是由于 Amazon Linux 上的 RPM/YUM 限制以及 php 多个版本的打包方式造成的。Amazon Linux 的一个特点是,有多种语言和其他开源软件包的多个版本。在许多情况下,这些软件包必须相互冲突,因为软件不是设计为同时安装的。

在这种情况下,每个 php 包都有一个通用提供(即 php php54 和 php55 都提供 php)。php-amazon-sdk2 只需要 php,通过在 yum 命令行上指定 php55 包即可满足此要求。冲突错误来自 php-guzzle-Guzzle 包,该包需要 php-common。在这种情况下,如果您在安装 php-amazon-sdk2 包时将 php55-common 添加到 yum 命令中,它将成功。

yum install -y httpd24 php55 php55-common php-amazon-sdk2

通常,在 Amazon Linux AMI 上,如果您遇到与 php 冲突的错误,解决方法是将正确版本的软件包添加到 yum 命令行。在本例中,报告的冲突是 php-common。您知道您想要安装 php55,因此只需告诉 yum 您想要什么(即我想要 php55-common,而不是 php-common)。如果您安装需要 php 的软件包,并且您没有指定任何其他 php 软件包,那么 yum 将选择通用 php 软件包,并安装 PHP 5.3。这些冲突错误通常是 php54 和 php55 软件包的问题。

我同意这种解决方法并不直观,并且 Amazon Linux AMI 团队已经注意到了这个问题。他们正在探索针对此问题的几种不同解决方案。他们非常乐意接受有关 php 打包和 Amazon Linux AMI 的反馈。他们确实会监控 aws 论坛,因此那里是发布问题的最佳场所。如果您有 AWS Premium Support,您可以向他们提交案例,该案例将转发给 Amazon Linux AMI 团队。

谢谢,希思

答案2

我遇到了与 php-mbstring 软件包相关的类似问题。对于通过 Google 来到这里的朋友,我的解决方案是安装 php55-mbstring(我的 EC2 实例上安装了 php 5.5)。找出您机器上的 php 版本(命令 php -v),然后像我上面所做的那样将该版本附加到您的 PHP 包旁边。希望这对您有所帮助。

相关内容