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中取得image按钮传递的name值
Oct 09 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
9条PHP编程小知识及易犯的小错误
Jan 22 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
php json中文编码为null的解决办法
Dec 14 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
PHP匿名函数(闭包函数)详解
Mar 22 PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 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
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
浅谈php和.net的区别
2014/09/28 PHP
Laravel下生成验证码的类
2017/11/15 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
python回调函数用法实例分析
2015/05/09 Python
Python中常用信号signal类型实例
2018/01/25 Python
Django中的Model操作表的实现
2018/07/24 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
教育学专业毕业生的自我评价
2013/11/21 职场文书
销售主管竞聘书
2014/03/31 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
西岭雪山导游词
2015/02/06 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
诚信教育主题班会
2015/08/13 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
MySQL 如何分析查询性能
2021/05/12 MySQL
mysql自增长id用完了该怎么办
2022/02/12 MySQL
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android