Ubuntu中支持PHP5与PHP7双版本的简单实现
前言
最近在编写一个工具的时候,使用了PHP命名空间特性,在命名空间中如果想引用常量、函数,需要PHP5.6以上的版本,但我阿里云ECS上安装的版本是PHP5.5.9,由于ECS部署了很多PHP代码,如果贸然升级高版本PHP,可能会存在一些兼容性的问题。突然奇想,在同一个操作系统中,是否能够同时支持两个版本的PHP呢?
简单查阅了相关资料,其实在Ubuntu中使用包安装方式支持PHP双版本非常简单,两个版本存在能够互不干扰,接下去简单做下介绍,其实相关文章很多。
1:获取PHP7源
我的操作系统版本是Ubuntu14.04.5LTS,默认的PHP源是5.5.9版本,可以使用下列的命令确认:
$aptshowphp
为了获取各个版本的PHP源,
在Ubuntu官方的PPA包含了很多软件的源,为了支持PPA包,可以采用add-apt-repository命令行安装,如果该工具没安装,可以运行下列命令安装:
$aptinstallpython-software-properties
简单理解下add-apt-repository工具,该工具的作用如下:
Addsarepositoryintothe/etc/apt/sources.listor/etc/apt/sources.list.dorremovesanexistingone
也就是说无需你手动修改/etc/apt/sources.list,就能够通过该工具添加源。
为了支持多版本的PHP的源,运行如下命令:
$add-apt-repositoryppa:ondrej/php
运行完成后,实际上/etc/apt/sources.list.d/ondrej-php-trusty.list文件更新了。
2:更新系统
添加源后,需要运行下列命令更新系统,然后再安装各个PHP版本。
$apt-getupdate-y
3:安装PHP7.1
接下去看看目前有多少个PHP版本可以安装。
$apt-cachepkgnames|grepphp7
关键输出如下:
php7.0-fpm
php7.1-fpm
php7.2-fpm
libapache2-mod-php7.0
libapache2-mod-php7.1
libapache2-mod-php7.2
也就是支持两种SAPI,我主要使用Nginx+FPM的方式,也可以看出目前支持三个版本的PHP7。
我主要想使用命令行PHP7版本,顺带也想着把FPM安装上,运行如下命令了解详细信息:
$apt-cachedependsphp7.1-fpm Depends:php7.1-cli Depends:php7.1-common Depends:php7.1-json Depends:php7.1-opcache
可见php7.1-fpm也包含了命令行PHP(php7.1-cli),接下去安装:
$apt-getinstallphp7.1-fpmphp7.1-curl
3:观察安装后的文件
运行如下命令,观察php7.1-fpm安装了哪些文件。
$dpkg-Lphp7.1-fpm
关键输出如下:
/usr/sbin/php-fpm7.1
/etc/php/7.1/fpm/php-fpm.conf
/etc/apache2/conf-available/php7.1-fpm.conf
可以看出,你可以运行一个PHP7版本的FPM服务,和/etc/php5/fpm/php-fpm.conf使用的配置文件是互相隔离的,我的网站www.simplehttps.com和blog.simplehttps.com 就使用了两个版本的FPM。
接下去查看php7.1-cli安装了哪些文件,这是我最关心的。
$dpkg-Lphp7.1-cli
关键输出如下:
/usr/bin/php7.1
4:如何切换两个PHP版本
对于命令行来说,两个版本的地址如下:
/usr/bin/php7.1
/usr/bin/php5
难道运行不同版本的时候,使用完整路径?其实可以使用update-alternatives工具配置默认项运行的PHP版本。
$update-alternatives--setphp/usr/bin/php7.1
这样运行php-v就相当于运行/usr/bin/php7.1-v,如果想使用PHP5版本,可以运行下列命令切换:
$update-alternatives--setphp/usr/bin/php5
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。