Ubuntu中支持PHP5与PHP7双版本的简单实现


Posted in PHP onAugust 19, 2018

前言

最近在编写一个工具的时候,使用了PHP命名空间特性,在命名空间中如果想引用常量、函数,需要PHP5.6以上的版本,但我阿里云 ECS 上安装的版本是PHP 5.5.9,由于 ECS 部署了很多PHP代码,如果贸然升级高版本PHP,可能会存在一些兼容性的问题。突然奇想,在同一个操作系统中,是否能够同时支持两个版本的PHP呢?

简单查阅了相关资料,其实在 Ubuntu 中使用包安装方式支持PHP双版本非常简单,两个版本存在能够互不干扰,接下去简单做下介绍,其实相关文章很多。

1:获取PHP7源

我的操作系统版本是 Ubuntu 14.04.5 LTS,默认的PHP源是 5.5.9 版本,可以使用下列的命令确认:

$ apt show php

为了获取各个版本的PHP源,

在 Ubuntu 官方的 PPA 包含了很多软件的源,为了支持 PPA 包,可以采用 add-apt-repository 命令行安装,如果该工具没安装,可以运行下列命令安装:

$ apt install python-software-properties

简单理解下 add-apt-repository 工具,该工具的作用如下:

Adds a repository into the /etc/apt/sources.list or /etc/apt/sources.list.d or removes an existing one

也就是说无需你手动修改 /etc/apt/sources.list,就能够通过该工具添加源。

为了支持多版本的 PHP 的源,运行如下命令:

$ add-apt-repository ppa:ondrej/php

运行完成后,实际上 /etc/apt/sources.list.d/ondrej-php-trusty.list 文件更新了。

2:更新系统

添加源后,需要运行下列命令更新系统,然后再安装各个 PHP 版本。

$ apt-get update -y

3:安装PHP7.1

接下去看看目前有多少个PHP版本可以安装。

$ apt-cache pkgnames | grep php7

关键输出如下:

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-cache depends php7.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-get install php7.1-fpm php7.1-curl

3:观察安装后的文件

运行如下命令,观察 php7.1-fpm 安装了哪些文件。

$ dpkg -L php7.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 -L php7.1-cli

关键输出如下:

/usr/bin/php7.1

4:如何切换两个PHP版本

对于命令行来说,两个版本的地址如下:

/usr/bin/php7.1
/usr/bin/php5

难道运行不同版本的时候,使用完整路径?其实可以使用 update-alternatives 工具配置默认项运行的 PHP 版本。

$ update-alternatives --set php /usr/bin/php7.1

这样运行 php -v 就相当于运行 /usr/bin/php7.1 -v,如果想使用PHP5版本,可以运行下列命令切换:

$ update-alternatives --set php /usr/bin/php5

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
php网上商城购物车设计代码分享
Feb 15 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
Aug 06 PHP
获取URL文件名后缀
Oct 24 PHP
php网站判断用户是否是手机访问的方法
Nov 01 PHP
PHP开发框架kohana3 自定义路由设置示例
Jul 14 PHP
php中执行系统命令的方法
Mar 21 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 PHP
phpStorm2020 注册码
Sep 17 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 #PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 #PHP
ThinkPHP5+Layui实现图片上传加预览功能
Aug 17 #PHP
PHP实现类似题库抽题效果
Aug 16 #PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 #PHP
Laravel框架实现定时发布任务的方法
Aug 16 #PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 #PHP
You might like
PHP原理之异常机制深入分析
2010/08/08 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python有证书的加密解密实现方法
2014/11/19 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
Django中信号signals的简单使用方法
2019/07/04 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
会计应届生的自荐信
2013/12/13 职场文书
自我鉴定三原则
2014/01/13 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书