作为一个PHP开发,使用最新版PHP体验新功能是基本技术信仰。最新版PHP 8就要发布了,你还在从源码编译安装吗?对于CentOS系统,其实有更简单方便的安装方法。本文介绍使用Remi源安装最新版PHP 7和PHP8。

Remi源介绍

前文 常用yum源整理 已经介绍过Remi源,其官网是 http://rpms.remirepo.net/,维护了大量PHP软件包。Remi源的主要目标是提供最新版的PHP安装包,并对PHP提供全方位支持。基于这个目标,Remi源有如下特点:

1.  最快速度提供最新版PHP安装包,包括候选版的PHP 8。Remi源的安装包发布时间可能比 PHP官网 发布时间还早,例如最新版的 PHP 7.4.12 和 PHP 8.0 RC3,Remi源的包比官网新闻发布时间都早上一两天:

最新版PHp 7和PHP 8发布时间
最新版PHP 7和PHP 8官网发布时间

Remi源的PHP 7.4.12安装包发布时间:

remi源最新版PHP 7.4.12安装包发布时间
remi源最新版PHP 7.4.12安装包发布时间

以及最新版PHP 8.0 RC3发布时间:

Remi源最新版PHP 8安装包发布时间
Remi源最新版PHP 8安装包发布时间

Remi官方解释了为什么比官宣更早:PHP官方给源码打上分支标签后,会给各个源两天构建和测试时间,以便官方宣布时各个源已经提供了安装包。对于Remi源来说,其维护者目前专职做PHP打包,因此能第一时间提供安装包。

2. 提供了一些不兼容fedora政策的软件包,以及对一些过时的包提供安全更新。本人暂不清楚这指的哪些包,但是Remi源提供了最新版的Composer 2、Redis 5和Redis 6,这很给力;

3. 维护了一些不符合RHEL安全政策的软件包,例如不再被官方维护的PHP 5.4-5.6、PHP 7.1等。

尽管SCL、IUS等源也提供新版PHP,但不会像Remi这样紧紧跟随PHP的步伐。对于使用CentOS系统的PHP开发者,Remi源能让你最快速度用上最新版PHP及相关软件包,强烈推荐使用。

安装Remi源

Remi依赖于EPEL源,因此首先要安装EPEL(EPEL几乎是必不可少的yum/dnf源,许多发行版其实已经内置):

yum install -y epel-release # CentOS 8用户可以使用dnf安装

接着安装Remi源。Remi源在全球有许多镜像,国内推荐使用清华大学的镜像源安装(官网首页列出了许多源,清华源是国内镜像源代表):

# CentOS 8安装
yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-8.rpm
# CentOS 7安装
yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm
# CentOS 6将于11月30号(本月底)停止维护,不再建议使用
yum install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-6.rpm

此外建议安装 yum-utils 包,提供启用、禁用源等实用功能:

yum install yum-utils

安装好Remi源后,/etc/yum.repos.d 目录下多了 remi.repo, remi-safe.repo等文件。对于CentOS 6/7,remi-phpxx文件容易理解,是对应PHP版本的源配置文件;CentOS 8默认使用dnf包管理工具,支持模块(module)安装,多了remi-modular.repo文件(但没有remi-phpxx.repo这些文件)。

Remi源的配置文件中,只有remi-safe是默认启用的。remi-safe如其名,其中的包都很安全,不会改变系统行为,其他源文件中的包则可能会影响系统环境。

下面介绍Remi源安装最新版PHP 7和PHP 8的方法,包括系统安装(影响系统环境)和多版本共存两种方式。

使用Remi源安装最新版PHP 7和PHP 8

系统安装即安装的PHP为系统默认的PHP版本,会覆盖已有的PHP版本;多版本共存则可在系统中安装多个PHP版本,可按照需要切换PHP版本。

系统安装(单版本安装)

系统安装方式会取代系统中已有的版本,但其安装和使用最简单。以安装最新版PHP 8.0 RC3为例,系统安装的操作为:

# CentOS 6/7安装最新版PHP 8
yum-config-manager --disable 'remi-php*'
yum-config-manager --enable   remi-php80
yum clean all
yum install php php-fpm php-cli # 等一些额外PHP模块

# CentOS 8安装最新版PHP 8
dnf clean all
dnf module reset php
dnf module install php:remi-8.0
dnf install php-fpm php-cli # 等一些额外PHP模块

安装完成后,php -v 输出PHP版本信息如下:

PHP 8.0.0RC3 (cli) (built: Oct 27 2020 12:15:38) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies

可以看到,最新版的PHP 8已经被成功安装到系统中。

上面的安装命令复杂难记?没关系,Remi源贴心的提供了安装向导。在向导页面中输入你的操作系统版本,要安装的PHP版本和安装方式,安装教程就出来了(本节对应default/single version安装方式):

Remi源安装向导
Remi源安装向导

系统安装方式简单,但是会替换系统中的PHP版本,不建议在线上使用。

多版本共存安装

系统安装其实是将对应PHP版本的源开启了(配置文件中的enabled改成了1),于是会替换系统版本,这是不safe的行为(remi-safe中的包则不会这样干)。鉴于此,Remi源提供了类似模块的安装方式,能让多PHP版本共存。

同样可以根据安装向导,得到多版本共存时最新版PHP 8的安装操作:

# CentOS 6/7安装最新版PHP 8
yum install php80 php80-php-fpm php80-php-cli # 等一些额外PHP模块,都以php80开头

# CentOS 8安装最新版PHP 8
dnf module install php80
dnf install php80-php-fpm php80-php-cli # 等一些额外PHP模块,都以php80开头

由于不是系统安装,安装好后无法直接通过php命令使用(会提示php命令不存在)。多版本安装时有两种PHP使用方式:

  1. 通过php80前缀的方式使用,例如php80 -v,输出和上文一致;
  2. 通过Remi源的脚本开启,类似于module加载:source /opt/remi/php80/enable,接下来就可以直接用php了。

实践中推荐使用第二种方式,能方便的在多个版本中切换当前系统使用的PHP版本,也无需使用前缀。

如果你使用过SCL等源安装过软件,非系统安装的软件包和配置都在/opt目录中,前缀以rh、phpxx等开头。例如开启PHP8.0 FPM的开机自启:systemctl enable php80-php-fpm,系统安装方式则无需携带前缀。

总结

Remi源给使用CentOS及衍生系统的PHP开发者带来最新版的福音,不仅能让你用上最新版的PHP,还能让你简单方便的在系统中安装多个版本的PHP,同时简单快捷地切换PHP版本,因此是非常建议安装和使用的。

参考

  1. 常用yum源整理
  2. Remi源FAQ
  3. Remi源wizard
  4. PHP开发环境安装之一