我正在尝试使用php55和Amazon PHP sdk来创build新的Amazon Linux EC2实例。 但是,我遇到了一个我认为是由PHP版本冲突引起的问题。 我觉得有些东西我不知道在这种情况下yum是如何工作的。
把它归结为最简单的情况,如果我运行:
yum install -y httpd24 php55 php-amazon-sdk2
我得到“ 错误:php55与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,如果我同时安装的话。 什么是解决这个问题的正确方法(也就是说,我不想强制安装它,忽略依赖关系,但是我也不想在单独的步骤中这样做)?
这是由于亚马逊Linux上RPM / YUM的限制,以及多个版本的php的打包方式。 亚马逊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常见的。 你知道你想安装php55,所以这只是一个告诉百胜确切你想要什么(即我想php55常见,而不是常见的php)的问题。 如果你安装了一个需要php的包,而你没有指定任何其他的php包,那么yum将select通用的php包,并且PHP 5.3将被安装。 这些冲突错误通常是php54和php55包的一个问题。
我同意这个解决方法并不直观,亚马逊Linux AMI团队已经注意到这个问题。 他们正在探索解决这个问题的几种方法。 他们对php封装和Amazon Linux AMI的反馈非常开放。 他们监视aws论坛,所以这将是发布问题的最佳地点。 如果您拥有AWS Premium支持,则可以使用AWS Premium支持打开案例,并将其转发给Amazon Linux AMI团队。
谢谢,希斯
我有一个涉及包php-mbstring类似的问题。 对于那些通过谷歌发送给你的人,我的解决scheme是安装php 55 -mbstring(我的EC2实例上有php 5.5)。 找出你的机器上有什么版本的php(命令php -v),然后像上面那样在PHP pacakge旁边添加这个版本。 希望这会帮助你。