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

Vic*_*ary 22 linux php centos yum centos6

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

我真的可以在这些步骤中使用一些详细信息:

  1. 如何将提供 PHP 5.4 的 repo 添加到 yum
  2. 这可以无缝替换 CentOS 中当前的 PHP 版本吗?
  3. 当它支持 PHP 5.4 时,如何切换回官方存储库?(我系统中的当前 5.3.3)
  4. 是否有可能破坏我目前使用的 PHP 模块?

笔记

人们在较新版本上使用相同的方法成功升级,并建议删除问题中的特定版本。虽然最好确定版本以防新版本确实破坏某些内容,但我希望保留社区建议的最新成功版本作为注释。

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

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

小智 19

我按照在 Fedora 17/16、CentOS/RHEL 6.3/5.8 上安装 Apache/PHP 5.4.10 中的说明进行了轻微修改。大概花了 10 分钟。我的确切命令如下所示。请注意,必须从文章中显示的内容更改第一个命令。变化是从epel-release-6-7.noarch.rpmepel-release-6-8.noarch.rpm

  1. 如何将提供 PHP 5.4 的 repo 添加到 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这可以无缝替换 CentOS 中当前的 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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 支持PHP5.4如何切换回官方repo?我还没有测试从 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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 是否有可能破坏我 [原文如此] 当前使用的 PHP 模块?是的。使用使用 Zend 安装程序安装 Zend 的最新版本的 CentOS(6.2?),上述升级破坏了 Zend。

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

此外,不要默认启用 Remi 存储库 - 过去我很聪明并默认启用它,即使存储库优先,事情也失败了。

  • 使用 remi 时,事情往往会变得很糟糕。我更喜欢使用 iuscommunity 存储库来获取最新的 php。另一种方法是使用 Zend 服务器存储库,但对我来说似乎有点开销。 (3认同)

And*_*ndy 9

对其他 Webtatic 答案的改进:

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

rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
Run Code Online (Sandbox Code Playgroud)

2 . 您需要首先查看现有安装的哪些包需要替换,您可以通过使用 yum shell 在一个事务中组合删除 php-common 和安装 php54w-common 来完成此操作(因此不会删除共享依赖项)

yum shell
> remove php-common
> install php54w-common
> run
…
Is this ok [y/N]: n
Run Code Online (Sandbox Code Playgroud)

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

Removing for dependencies:
 php
 php-cli
 php-pear
 php-pecl-memcache
 php-mysql
Run Code Online (Sandbox Code Playgroud)

如果此列表中除了 php* 之外还有其他软件包,那么您无法无缝切换到 Webtatic PHP 5.4,但必须研究替代方案。Webtatic 具有所有基本 php 包的替换包(请参阅 1. 中链接的页面上列出的包以进行确认),因此应该没有问题,除非您使用其他 3rd 方存储库,这些存储库安装了依赖于特定 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
Run Code Online (Sandbox Code Playgroud)

然后,您应该只在列表中看到您设置为删除和安装的软件包,您可以确认安装以进行切换。当前正在加载 php 的任何服务都需要重新启动,例如 httpd 或 php-fpm。

至于这是“无缝”的,在用户能够访问网站时发生的任何软件更改都应该完全理解其后果。在进程尚未加载时删除和添加共享库可能会在共享库不存在时加载它们。最好是离线进行这样的软件升级,最好先在非生产机器上进行测试,以验证该过程是否按预期工作。

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
Run Code Online (Sandbox Code Playgroud)

然而,至于切换到假设基础 php54,某些软件包可能没有替代方案(例如 CentOS 5 中没有 php53-pecl-memcache 扩展)并且 Webtatic 具有 CentOS 基础中不可用的软件包(例如 php54w -pecl-zendopcache)。如果它们丢失,那么除了直接使用 pecl 安装它们之外,您通常别无选择。

4 . 任何 PHP 升级都可能引入错误,并且应该重新测试网站。这不是 Webtatic 特有的,而是新功能引入新错误的总体思路。

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

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