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的ob_start();控制您的浏览器cache!
Nov 25 PHP
php中文字符截取防乱码
Mar 28 PHP
php win下Socket方式发邮件类
Aug 21 PHP
php定时删除文件夹下文件(清理缓存文件)
Jan 23 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
php字符串函数学习之substr()
Mar 27 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
浅析PHP7的多进程及实例源码
Apr 14 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
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
前端必学之PHP语法基础
2016/01/01 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python字符串排序方法
2014/08/29 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
python文件与目录操作实例详解
2016/02/22 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
详解K-means算法在Python中的实现
2017/12/05 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
python实现与redis交互操作详解
2020/04/21 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
大学学习生活感言
2014/01/18 职场文书
打架检讨书2000字
2014/02/22 职场文书
捐资助学倡议书
2014/04/15 职场文书
建筑结构施工求职信
2014/07/11 职场文书
离职报告范文
2014/11/04 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
python中数组和列表的简单实例
2022/03/25 Python