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 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
php 什么是PEAR?
Mar 19 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
Jun 22 PHP
smarty中常用方法实例总结
Aug 07 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
PHP数据库处理封装类实例
Dec 24 PHP
PHP中类的自动加载的方法
Mar 17 PHP
PHP simplexml_import_dom()函数讲解
Feb 03 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 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结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
php限制文件下载速度的代码
2015/10/20 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
vue实现文字加密功能
2019/09/27 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
Python中的类学习笔记
2014/09/23 Python
python操作excel的方法
2018/08/16 Python
python检测服务器端口代码实例
2019/08/31 Python
django-csrf使用和禁用方式
2020/03/13 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
教学器材管理制度
2014/01/26 职场文书
淘宝好评语大全
2014/05/05 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
Python的property属性详细讲解
2022/04/11 Python