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介绍篇
Oct 26 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
YII中assets的使用示例
Jul 31 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
Aug 28 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
PHP时间处理类操作示例
Sep 05 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
2016/06/30 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
python根据经纬度计算距离示例
2014/02/16 Python
详解Python字符串对象的实现
2015/12/24 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
keras 权重保存和权重载入方式
2020/05/21 Python
Python脚本调试工具安装过程
2021/01/11 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
小学毕业演讲稿
2014/04/25 职场文书
物流管理专业自荐信
2014/06/23 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
安全承诺书格式范本
2015/04/28 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记