如何用yum在CentOS升级到最新的PHP版本?

我发现了一些关于这个的博客文章,但是对可能的副作用缺乏描述。

我真的可以使用一些详细的这些步骤:

  1. 如何添加一个提供PHP 5.4到yum的回购
  2. 这可以在CentOS中无缝地replace当前的PHP版本吗?
  3. 当它支持PHP 5.4时,如何切换回官方回购? (目前5.3.3在我的系统中)
  4. 有没有可能破坏我目前使用的PHP模块?

注意

人们在新版本中使用相同方法成功升级,并build议删除问题中的特定版本。 虽然在新版本实际上打破了某些东西的情况下固定版本是好事,但是我想保留社区提出的最新成功版本作为备注。

如果您在其他版本上成功升级,请随时更新。

  • PHP版本:5.4,5.5,5.6
  • CentOS版本:5,6

我遵循Fedora 17/16上的安装Apache / PHP 5.4.10,CentOS / RHEL 6.3 / 5.8的指示,稍作修改。 花了10分钟。 我的确切命令如下所示。 请注意,第一条命令必须从文章中显示的内容进行更改。 这个改变是从epel-release-6-7.noarch.rpmepel-release-6-8.noarch.rpm

  1. 如何添加一个提供PHP 5.4到yum的回购?

     yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm 
  2. 这可以在CentOS中无缝地replace当前的PHP版本吗? 对于我来说,下面的命令工作,没有我的现有的PHP网页打破。 你的旅费可能会改变。

     yum --enablerepo=remi install httpd php php-common yum --enablerepo=remi install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml service httpd restart 
  3. 当它支持PHP5.4时,如何切换回官方回购? 我没有testing过从CentOS版本库中删除并重新安装PHP的命令,但是这些应该可以工作。

     # Remove the Remi packages. Note the reversed command order yum remove php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml yum remove httpd php php-common # Install the CentOS packages. yum install httpd php php-common yum install php-pecl-apc php-cli php-pear php-pdo php-mysql php-pgsql php-pecl-mongo php-sqlite php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml 
  4. 有没有可能破坏我正在使用的PHP模块? 是。 使用最新版本的CentOS(6.2?)和使用Zend安装程序安装的Zend,上面的升级破坏了Zend。

所有上述命令都以root身份运行。 最佳做法是以非特权用户身份login并使用sudo 。 (这是一个具有当前快照的开发虚拟机…)

此外,不要默认启用Remi存储库 – 过去,我已经很聪明,默认情况下启用它,事情也破坏了,即使存储库优先。

对其他Webtatic答案的改进:

1。 使用http://www.webtatic.com/packages/php54/上的指南:

 rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm 

2。 您需要先看看现有安装的软件包需要replace,您可以通过使用yum shell来结合删除php-common和在一个事务中安装php54w-common(因此不会删除共享依赖关系)

 yum shell > remove php-common > install php54w-common > run … Is this ok [y/N]: n 

不要对结果说“y”,但要注意“删除依赖项”中提到的所有软件包,例如

 Removing for dependencies: php php-cli php-pear php-pecl-memcache php-mysql 

如果在这个列表中有其他软件包而不是php *,那么你不能无缝切换到Webtatic PHP 5.4,但是将不得不调查替代品。 Webtatic已经为所有的基础php软件包提供了replace软件包(请参阅1.链接到的页面上列出的软件包以进行确认),所以应该没有问题,除非您使用其他第三方软件仓库,这些软件包安装依赖于特定的PHP版本安装。

对于其余的安装(仍然在yum shell),你只需删除这些软件包并安装他们的php54w- *对应的:

 > remove php-common php php-cli php-pear php-pecl-memcache php-mysql > install php54w-common php54w php54w-cli php54w-pear php54w-pecl-memcache php54w-mysql > run … Is this ok [y/N]: y 

然后,您应该只能看到您已设置的软件包被删除并安装在列表中,您可以确认安装切换。 目前运行php的任何服务都需要重新启动,例如httpd或php-fpm。

至于“无缝”,用户可以访问网站时发生的任何软件变化应该完全理解的结果。 当进程还没有加载共享库时,可能会加载共享库,而共享库不在那里。 最好是像这样离线进行软件升级,最好先在非生产机器上进行testing,以validation过程是否按预期工作。

3。 要切换到一个假想的CentOS基地php54包(CentOS 5使用php53前缀),您只需运行上述步骤取代php删除与php54w删除,和php54w安装与php54安装

 yum shell > remove php54w-common > install php54-common > run … Is this ok [y/N]: n … > remove php54w-common php54w php54w-cli php54w-pear php54w-pecl-memcache php54w-mysql > install php54-common php54 php54-cli php54-pear php54-pecl-memcache php54-mysql > run Is this ok [y/N]: y 

然而,至于切换到假想的基地php54,有些软件包可能没有其他的select(例如在CentOS 5中没有php53-pecl-memcache扩展),而Webtatic的软件包在CentOS基础上是不可用的(例如php54w -pecl-zendopcache)。 如果他们错过了,那么你通常没有别的select,只能直接使用pecl来安装它们。

4。 任何PHP升级都可能引入错误,网站应该重新testing。 这不是特定于Webtatic,而是新function引入新bug的总体思路。

与被接受的答案中的Remi存储库不同,Webtatic EL6存储库从不使用与CentOS基本存储库相同的包名称,因此不会覆盖您不打算切换到的包的安装/升级,因此默认情况下处于启用状态。

免责声明:我是Webtatic的所有者/维护者

你可以在这里findphp 5.4.9 for yum install:

http://www.webtatic.com/packages/php54/

你可以做一个“rpm -qa | grep php”来查看所有当前的php软件包和一个“rpm -e”来删除。 我不知道你当前的模块,但在升级之前值得testing。