如何在Ubuntu中在多个PHP版本之间切换

时间:2020-03-21 11:45:00  来源:igfitidea点击:

有时,安装的软件包的最新版本可能无法按预期工作。
应用程序可能与更新的程序包不兼容,并且仅支持程序包的特定旧版本。
在这种情况下,我们可以立即将有问题的软件包降级到其较早的工作版本。
请参考我们的旧教程,了解如何在Ubuntu及其降级版本中降级软件包以及如何在Arch Linux及其派生版本中降级软件包。

但是,我们不必降级某些软件包。
我们可以同时使用多个版本。
例如,假设我们要在Ubuntu 18.04 LTS中部署的LAMP堆栈中测试PHP应用程序。

一段时间后,我们发现该应用程序在PHP 5.6中运行良好,但在PHP 7.2中运行不正常(Ubuntu 18.04 LTS默认情况下会安装PHP 7.x)。
我们要重新安装PHP还是重新安装整个LAMP堆栈?
不过没有必要。
我们甚至不必将PHP降级到其早期版本。
在这个简短的教程中,将介绍如何在Ubuntu 18.04 LTS中的多个PHP版本之间切换。

在多个PHP版本之间切换

要检查PHP的默认安装版本,请运行:

$php -v
PHP 7.2.7-0ubuntu0.18.04.2 (cli) (built: May 4 2016 16:55:24) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.2.7-0ubuntu0.18.04.2, Copyright (c) 1999-2016, by Zend Technologies

如我们所见,PHP的安装版本为7.2.7.
在测试了几天的应用程序之后,我们发现应用程序不支持PHP 7.2.
在这种情况下,最好同时拥有PHP 5.x版本和PHP 7.x版本,以便我们可以随时轻松地在任何受支持的版本之间来回切换。

我们无需删除PHP 7.x或者重新安装LAMP堆栈。
我们可以同时使用PHP 5.x和7.x版本。

我假设我们尚未在系统中卸载php 5.6.
以防万一,我们已经删除了它,可以使用如下所示的PPA重新安装它。

我们可以从PPA安装PHP 5.6:

$sudo add-apt-repository -y ppa:ondrej/php
$sudo apt update
$sudo apt install php5.6

从PHP 7.x切换到PHP 5.x

首先使用以下命令禁用PHP 7.2模块:

$sudo a2dismod php7.2
Module php7.2 disabled.
To activate the new configuration, you need to run:
systemctl restart apache2

接下来,启用PHP 5.6模块:

$sudo a2enmod php5.6

将PHP 5.6设置为默认版本:

$sudo update-alternatives --set php /usr/bin/php5.6

或者,我们可以运行以下命令来设置默认情况下要使用的系统范围的PHP版本。

$sudo update-alternatives --config php

输入选择编号以将其设置为默认版本,或者直接按Enter保留当前选择。

如果我们已经安装了其他PHP扩展,请将它们也设置为默认值。

$sudo update-alternatives --set phar /usr/bin/phar5.6

最后,重新启动Apache Web服务器:

$sudo systemctl restart apache2

现在,检查PHP 5.6是否为默认版本:

$php -v
PHP 5.6.37-1+ubuntu18.04.1+deb.sury.org+1 (cli) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

从PHP 5.x切换到PHP 7.x

同样,我们可以从PHP 5.x切换到PHP 7.x版本,如下所示。

$sudo a2enmod php7.2
$sudo a2dismod php5.6
$sudo update-alternatives --set php /usr/bin/php7.2
$sudo systemctl restart apache2