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

前言

最近在编写一个工具的时候,使用了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

总结

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

(0)

相关推荐

  • Ubuntu环境下使用G++编译CPP文件

    第一次用g++编译cpp文件的时候报了undefined reference的错误,自定义类中的函数全部都无法找到,查找资料后发现调用的类是需要链接的,本文以一个小例子描述编译的过程.其中class2类调用了class1类的成员函数,依赖于class1类,而test文件调用了class2类的成员函数,依赖于class1类. //class1.h #ifndef _CLASS1_H #define _CLASS1_H class class1 { public: int f(int i); };

  • 开发环境Ubuntu16安装以后的初始化设置

    办公室需要ubuntu系统作为linux开发环境,目前大家用的多的是ubuntu16.04.所以这里也以ubuntu16.4作为办公开发环境来进行一些初始化. 打开命令行 ubuntu16.04版本 右键--打开终端 有的Ubuntu 14.04没有自带右键打开终端功能,用起来非常不方便.今天偶尔想起来,网上搜了一下,方法如下: $ sudo apt-get install nautilus-open-terminal 注销系统重新登录,即可. 设置root用户密码 ubuntu默认root密码

  • Ubuntu 16.04设置PostgreSQL开机启动的方法

    由于PostgreSQL是编译安装的,需要设置开机启动.对于Ubuntu系统来说,和Red Hat之类的系统稍微有一点不一样. 首先第一步,由于我们习惯于使用Red Hat这样的系统,所以我们需要弄一个chkconfig出来.这个命令是配置Red Hat服务启动停止的命令,但是在Ubuntu上没有.我们可以使用sysv-rc-conf. sudo apt install sysv-rc-conf 安装完成sysv-rc-conf之后,我们把他换成chkconfig.毕竟这个命令太难记住了. su

  • Ubuntu16.04源码安装Mininet

    Mininet Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行相关的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow.OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机.链接和交换机在同一台计算机上且有助于互动开发.测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术:同时也可将此进程虚拟化的平台下代码迁移到真实的环境中. Mini

  • 在Ubuntu Linux上安装和使用Git和GitHub

    Git的简介 Git是2005年Linus Torvalds 为了帮助管理 Linux(R) 内核开发而开发的一个开放源码的版本控制软件,正如所提供的文档中说的一样: Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问. Github是一个存放着世界上最棒的一些软件项目的宝藏,这些软件项目由全世界的开发者无私贡献.这个看似简单,实则非常强大的平台因为大大帮助了那些对开发大规模软件感兴趣的开发者而被开源社区所称道. 这篇向导是对于安装和使用G

  • Ubuntu16.04.4LTS安装mininet遇到的问题及解决方案

    Mininet Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行相关的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow.OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机.链接和交换机在同一台计算机上且有助于互动开发.测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术:同时也可将此进程虚拟化的平台下代码迁移到真实的环境中. 下列图片

  • Ubuntu下VIM配置成C++开发编辑器

    1.复制配置文件到本用户环境下,再新建一个.vim文件夹,并创建bundle子文件夹 sudo cp /etc/vim/vimrc /home/wangy/.vimrc sudo mkdir /home/wangy/.vim sudo mkdir /home/wangy/.vim/bundle sudo mkdir /home/wangy/.vim/bundle/vundle bundle的配置文件如下: "新增的配置放在这里 set nocompatible " be iMprove

  • foreman ubuntu16 快速安装

    Quickstart Guide The Foreman installer is a collection of Puppet modules that installs everything required for a full working Foreman setup. It uses native OS packaging (e.g. RPM and .deb packages) and adds necessary configuration for the complete in

  • Ubuntu18下安装Nvidia驱动解决黑屏并调整分辨率问题

    Ubuntu自带的显卡驱动Nouveau会与N卡冲突,导致卡机黑屏,而禁用后分辨率又过低 1.禁用Nouveau显卡驱动 在进入grub启动界面时,10秒内使用↑↓键选中Ubuntu,按e键进行编辑,在倒数第二行quiet slash后添加acpi_osi=linux nomodeset quiet slash acpi_osi=linux nomodeset 该方法只是暂时禁用Nouveau显卡驱动,在进入桌面后需要在grub的配置文件里面更改已使得其永久有效,在命令行中输入如下命令: $ s

  • ubuntu16.04制作vim和python3的开发环境

    1. 安装vim: # apt-get install  -y vim-gnome 2. 安装ctags,ctags用于支持taglist # apt-get install ctags 3. 安装taglist # apt-get install vim-scripts vim-addon-manager # vim-addons install taglist 4. 安装pydiction 实现代码补全: #wget  https://www.vim.org/scripts/script.p

  • Ubuntu终端多窗口分屏Terminator

    1.安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator 2.快捷键 Ctrl+Shift+E    垂直分割窗口 Ctrl+Shift+O    水平分割窗口 F11               全屏 Ctrl+Shift+C    复制 Ctrl+Shift+V    粘贴 Ctrl+Shift+N    或者 Ctrl+Tab 在分割的各窗口之间切换 Ctrl+Shift+X    将分割的某一个窗口放大至全屏

随机推荐