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

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

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

我确实可以使用以下步骤的一些详细信息:

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

笔记

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

如果您已成功升级其他版本,请随意更新此版本。

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

答案1

我按照在 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
    
  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
    
  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
    
  4. 这是否有可能破坏我目前使用的 PHP 模块?是的。使用最新版本的 CentOS(6.2?)并使用 Zend 安装程序安装了 Zend,上述升级破坏了 Zend。

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

另外,不要默认启用 Remi 存储库 - 过去我很聪明,默认启用了它,结果事情就出了问题,即使有存储库优先权。

答案2

比其他 Webtatic 答案有所改进:

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

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

2. 您需要首先查看需要替换哪些现有安装的软件包,您可以使用 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 软件包提供了替代软件包(请参阅 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。

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

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,某些软件包可能没有替代品(例如,CentOS 5 中没有 php53-pecl-memcache 扩展),而 Webtatic 中有一些 CentOS 基础中没有的软件包(例如,php54w-pecl-zendopcache)。如果缺少这些软件包,那么通常除了直接使用 pecl 安装它们之外别无选择。

4. 任何 PHP 升级都可能引入错误,网站应该重新测试。这并非 Webtatic 特有的,而是新功能引入新错误的一般想法。

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

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

答案3

您可以在这里找到 php 5.4.9 进行 yum 安装:

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

您可以执行“rpm -qa | grep php”来查看所有当前 php 包,并执行“rpm -e”来删除。我不知道您当前的模块,但在升级之前值得测试。

相关内容