CentOS 7 中安装 PHP 7.3

CentOS 稳定的同时也有短板,官方没有更新某些组件的较新版本。目前 CentOS 7 中的 PHP 还是 5.4 版本,早已过了支持期。本来想坚持用到 CentOS 8 发布。可是 CentOS 8 似乎还遥遥无期,而 PHP 5.4 已经先被 WordPress 的插件嫌弃又被 WordPress 嫌弃了。那就更新吧。然而更新过程并不顺利,觉得还是有必要记录一下。

因为以前用过 remi 的安装源,这次决定还是继续用它。看 remi 上的向导似乎很容易。但还是不敢掉以轻心,觉得还是留一手,免得一时半会儿弄不好的话会导致服务器不在线的时间过长。

备份 VPS 磁盘

之前就一直用 Linode VPS 中的磁盘复制来作为临时的备份。因为之前倒腾数据中心的时候将磁盘尺寸调整到尽量小了,后来 Linode 涨磁盘容量的时候我也没怎么用,完全够用来将当前磁盘复制一份。

不过复制磁盘的功能在新版的云管理器中找不到了。新版 Linode Manager 中只有个「磁盘镜像化 Imagize」(新版 Linode Manager 中,Linodes -> Settings -> Advanced Configurations -> Disks),可是有 2GB 的大小限制。

打开旧版的 Linode Manager 发现磁盘复制功能还在。编辑正在使用的磁盘 CentOS 7,「Duplicate Disk」 (而不是 Create Image,否则有 2GB 大小限制)。更改克隆的新磁盘的标签 Copy of CentOS 7 为 CtOS7_PHP54,作为备份。不过这样虽然省钱,但是在操作的这段时间里的服务器更改,包括网站留言之类的,就不会在还原的时候被保留了。于是我就选了个访问量特别小的周末的半夜来进行这些操作。

有了备份之后就可以大胆玩了,玩坏了还可以修改 Linode VPS 配置将磁盘替换成复制的磁盘来启动,就可以恢复到折腾前的状态了。

升级到 PHP 7.3.3

继续在现用磁盘上折腾,都不需要重启服务器。

按照 Remi 上的指示操作。选择目标 PHP 版本为 7.3.3 并选择 Default/Single version 方式安装。

安装 EPEL 源。这个其实之前已经安装过了。

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装 remi 源。这个虽然之前用过,可是后来重装系统就没有再用了。

# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

安装 YUM 工具。

# yum install yum-utils

现在就可以执行升级从 Remi 源来更新先有软件了。主要是 PHP,但是 phpMyAdmin 我也用了,需要相应的升级到 Remi 源里面的新版本。所以除了启用 remi-php73 源之外还需要启用 remi 主源。

# yum-config-manager --enable remi-php73
# yum-config-manager --enable remi

因为没有使用 priorities 插件了,所以直接执行升级。

# yum update

然而并不能顺利更新,因为有些依赖性问题。

分析并解决更新问题

最大的问题似乎是一些软件包,如 NetworkManager、ipset 之类的因为有低版本不能自动清除而阻碍了安装。yum update 的结尾有提示,

** Found 32 pre-existing rpmdb problem(s), 'yum check' output follows:」。
1:NetworkManager-1.10.2-16.el7_5.x86_64 has missing requires of NetworkManager-libnm(x86-64) = ('1', '1.10.2', '16.el7_5')

1:NetworkManager-1.12.0-8.el7_6.x86_64 is a duplicate with 1:NetworkManager-1.10.2-16.el7_5.x86_64
audit-2.8.1-3.el7_5.1.x86_64 has missing requires of audit-libs(x86-64) = ('0', '2.8.1', '3.el7_5.1')
audit-2.8.4-4.el7.x86_64 is a duplicate with audit-2.8.1-3.el7_5.1.x86_64
……

其实这些软件包都是重复的,它们的高版本已经安装过了。可以通过下面的指令查询,

# package-cleanup --dupes

清除上面的低版本软件包之后居然又发现了一个新的,

[root@CnZhx cnzhx] # package-cleanup --dupes
Loaded plugins: fastestmirror
php-fpm-5.4.16-46.el7.x86_64
php-fpm-5.4.16-45.el7.x86_64

然而似乎还是不行。不管是 yum update 还是 yum upgrade 都会遇到问题。如果使用 --skip-broken 的话,php73 相关的软件包又不会被更新。

于是决定尝试先删除 php 相关的软件包然后重新安装它们。

# yum remove php php-common php-fpm phpmyadmin

根据依赖关系删除的包总共有 22 个。

然后重新安装,

# yum install php php-common php-fpm php-mysqlnd php-opcache php-cli php-gd php-mbstring php-pecl-mcrypt php-php-gettext php-process php-tidy php-xml

完成后重启 httpd 和 php-fpm 服务,

# systemctl restart httpd php-fpm

之后发现似乎可以用了。

安装过程中发现有些包改名字了,比如,php-mysql ==》 php-mysqlnd,php-pecl-zendopcache ==》 php-opcache。

这次终于能够顺利完成了。而且 OpCache 已经成为 PHP 的一部分而不再是单独的 Zend Opcache 插件了。

然后单独安装 phpMyAdmin,因为上面尝试的时候只有它失败了,因为没有 php-zip。再次根据安装结果信息尝试安装可提供 php-zip 的 php-pecl-zip,

# yum install php-pecl-zip

然后就可以安装 phpMyAdmin 了,

# yum install phpmyadmin

安装完成后需要恢复原来的 phpMyAdmin 配置,

  • /etc/phpMyAdmin/config.inc.php.rpmsave 里面有原来的配置,可以直接替换到新产生的 config.inc.php 中,
    # mv /etc/phpMyAdmin/config.inc.php /etc/phpMyAdmin/config.inc.php.rpmnew
    # mv /etc/phpMyAdmin/config.inc.php.rpmsave /etc/phpMyAdmin/config.inc.php
  • phpMyAdmin 的配置文件 /etc/httpd/conf.d/phpMyAdmin.conf.rpmsave
    mv /etc/httpd/conf.d/phpMyAdmin.conf.rpmsave /etc/httpd/conf.d/phpMyAdmin.conf

不需要额外配置即可使用。

其它问题的解决

虽然基本上服务器已经可以正常使用 php73 来工作了,还是有些其它的问题,也就是升级过程中的配置文件变化和网站程序中会在 PHP 7.3 中报错的旧代码。当然也可能是我更新过程中用了 yum upgrade

发现的问题有:

  • php.ini 需要重新优化
  • cnzhx.net 无法正常打开(500)错误,但是其它站点没问题。后来发现是因为安装新 php-fpm 的时候原来的 /etc/php-fpm.d/www.conf 文件被替换为默认的了。修改了其中的 user 和 group 之后就正常了。当然同时也检查了其它相关配置参数。似乎直接用原来的替换掉也没问题的。
  • cnzhx.net 中有些自定义的 PHP 函数有问题,修正之后才完全正常。这些错误可以从该站点的访问日志中查看到。只能说是 php 7 对于语法问题的容忍度更低了。
  • SimpleMachinesForum 因为有 create_function 而出现大量的警告,包括论坛管理单元中的日志和服务器日志中都有。真是非常大量。管理单元中的日志可以简单修改源代码来过滤掉,但是服务器日志中的就没办法了。虽然有个 mod 可以解决 SMF 中出现的 create_function 提示,但是安装的时候发现检测过程有错误,就不敢安装了。这个 mod 也是通过修改源代码来将 create_function 替换成匿名函数(参考这里)。暂时先这样吧。

虽然都不是什么大事儿,可是还是折腾了好久。现在看来似乎已经没什么问题了。

©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/upgrade-to-php-733-in-centos-7/>。转载请保留此信息及相应链接。

5 条关于 “CentOS 7 中安装 PHP 7.3” 的评论

  1. 不会吧楼主 我也是因为wp 提示php 版本太低无法升级 才想起来说升级下,看你的博文 我都不敢尝试了。

  2. 引用通告: CentOS 8 已经发布 | 水景一页

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>