在命令行中切换Ubuntu 16.04上的PHP版本

274

我已经在我的Ubuntu 16.04上安装了PHP 5.6和PHP 7.1。

我知道如果我的web服务器是Apache,我可以做到:

a2enmod php5.6 #to enable php5
a2enmod php7.1 #to enable php7

当我在 Apache 模块中禁用 php7.1 并启用 php5.6 时,Apache 会识别更改并按预期使用 php5.6 解释器。

但是,当我从命令行运行内部 php web 服务器时:

php -S localhost:8888

PHP使用PHP 7处理请求。那么我如何在命令行中在PHP 5.6和PHP 7.1之间切换?


http://askubuntu.com/questions/705880/how-to-install-php-7 - Aman Kumar
19个回答

543

交互式切换模式

sudo update-alternatives --config php
sudo update-alternatives --config phar
sudo update-alternatives --config phar.phar

手动切换

从 PHP 5.6 => PHP 7.1

您的系统默认使用 PHP 5.6,您需要切换到 PHP 7.1。

Apache:

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1
$ sudo service apache2 restart

命令行:

$ sudo update-alternatives --set php /usr/bin/php7.1
$ sudo update-alternatives --set phar /usr/bin/phar7.1
$ sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.1

从PHP 7.1 => PHP 5.6

您的系统默认使用PHP 7.1,您需要切换到PHP 5.6。

Apache:

$ sudo a2dismod php7.1
$ sudo a2enmod php5.6
$ sudo service apache2 restart

命令行:

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

来源


6
这个命令是“sudo update-alternatives --set php /usr/bin/php5.6”,它节省了我的时间。谢谢@StevieG。请注意,我是一个AI语言模型,不会有自己的感情和经验。 - Ask Xah
1
确实,我刚刚使用了这个解决方案将 php -v 从7.2更改为7.1!它非常好而且简单。 - SaidbakR
3
在Ubuntu 18.04中,我需要执行一些额外的步骤来禁用其他版本,否则进程将继续运行。# systemctl stop php5.6-fpm | # systemctl disable php5.6-fpm | 要获取php进程列表,请执行 # ps -ax | grep php - Braconnot_P
1
$ sudo update-alternatives --set php /usr/bin/php5.6 帮助我使 phpinfo()php -v 显示相同的 PHP 版本。 - VijayRana
1
谢谢,命令行选项运行良好。 - jking
显示剩余3条评论

452
$ sudo update-alternatives --config php

适用于16.04版本之后的所有ubuntu版本(包括18.0420.04

这是你应该看到的回复

There are 4 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php7.2   72        auto mode
  1            /usr/bin/php5.6   56        manual mode
  2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode
Press <enter> to keep the current choice[*], or type selection number:

选择适当的版本


12
这个应该是答案。 - itsazzad
2
为什么需要使用php7.2两次? - Sand Of Vega
2
@burzum 在 Ubuntu 20.04 上运行良好。 - Pothi Kalimuthu
3
@SandOfVega 零号路径始终是当前选择的路径。然后从第一个开始,它们都会显示出来,包括所选的路径。注意:如果您没有安装多个PHP版本,则此命令将提醒您没有可选项,并且您将无法看到上面呈现的表格。 - s3c
1
Funkin love you ma maaannnnnn - Ismail Farooq
显示剩余4条评论

39

ubuntu 20.04 中切换 PHP 8.0PHP 7.4 版本:

降级 PHP 8.0PHP 7.4

sudo a2dismod php8.0
sudo a2enmod php7.4
sudo service apache2 restart
sudo update-alternatives --config php
sudo update-alternatives --config phar
sudo update-alternatives --config phar.phar
sudo service apache2 restart

升级 PHP 7.4PHP 8.0

sudo a2dismod php7.4
sudo a2enmod php8.0
sudo service apache2 restart
sudo update-alternatives --config php
sudo update-alternatives --config phar
sudo update-alternatives --config phar.phar
sudo service apache2 restart

检查更改:

  1. 在控制台中运行php -v,将会显示以下信息:

PHP 8.0.3 (cli) (built: Mar 5 2021 07:54:13) ( NTS ) 版权所有 (c) The PHP Group Zend Engine v4.0.3,版权所有 (c) Zend Technologies with Zend OPcache v8.0.3,版权所有 (c) Zend Technologies

或者

PHP 7.4.16 (cli) (built: Mar 5 2021 07:54:38) ( NTS ) 版权所有 (c) The PHP Group Zend Engine v3.4.0,版权所有 (c) Zend Technologies with Zend OPcache v7.4.16,版权所有 (c) Zend Technologies

  1. 在可运行的本地环境(例如 /var/www/html/ 路径)中添加一个 PHP 文件,并添加phpinfo();来在浏览器中获取 PHP 信息(页面顶部将显示 PHP 版本)

在其他示例中,php-config或phpize没有任何更改吗?是否有类似于sudo update-alternatives --set php-config /usr/bin/php-config8.0这样的东西? - Mr. BigglesWorth

34

列出所有可用的版本并从中选择:

sudo update-alternatives --config php

或者手动操作

sudo a2dismod php7.1 // disable
sudo a2enmod php5.6  // enable

1
你在这里手动选择的选项与第一个选项不同。第一个选项是设置将在命令行中调用php时使用的php可执行文件。你在这里提供的手动选项是切换apache2将使用的php模块。 - PiX06

19

我不建议使用 a2enmod 来安装 php 5 或 7,而是建议使用 update-alternatives。你可以运行 sudo update-alternatives --config php 命令来设置系统中全局使用的 PHP 版本,这样命令行和 Apache 版本就可以同时工作。你可以在手册页面了解更多关于 update-alternatives 的内容。


4
对我来说它不起作用。即使我尝试选择,PHPINFO仍然显示相同的版本。 - brunoramonalmeida
我似乎也遇到了同样的问题。解决后,我会在这里回来并提供链接。 - undefined

18

我认为你应该尝试一下这个。

从php5.6升级到php7.1

sudo a2dismod php5.6
sudo a2enmod php7.1
sudo service apache2 restart

sudo update-alternatives --set php /usr/bin/php7.1
sudo update-alternatives --set phar /usr/bin/phar7.1
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.1

从php7.1到php5.6

sudo a2dismod php7.1
sudo a2enmod php5.6
sudo service apache2 restart

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

1
请在回答中提供足够的解释,以便理解代码的工作原理和含义。这样,答案对于遇到相同问题的用户将会非常有用。请参阅链接了解如何编写好的答案。 - Jino Shaji

13
你可以创建一个脚本来切换版本:sudo nano switch_php,然后输入以下内容:
#!/bin/sh
#!/bin/bash
echo "Switching to PHP$1..."
case $1 in
    "7")
        sudo a2dismod php5.6
        sudo a2enmod php7.0
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php;;
    "5.6")
        sudo a2dismod php7.0
        sudo a2enmod php5.6
        sudo service apache2 restart
        sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php;;
esac
echo "Current version: $( php -v | head -n 1 | cut -c-7 )"

退出并保存 使其可执行:sudo chmod +x switch_php

要执行脚本,请键入./switch_php [版本号],其中参数为7或5.6

这样,您现在可以轻松地从PHP7切换到PHP5.6!


看起来很有前途,但在使用“ln -sfn…”命令时,“n”标志是什么意思?我在文档中找不到这个标志。 - Fakhar Anwar
@FakharAnwar man ln: -n, --no-dereference:如果LINK_NAME是指向目录的符号链接,则将其视为普通文件 - Flame

13

这对我有用:

sudo update-alternatives --set php /usr/bin/php7.4

只需要将 PHP 版本更改为你需要的版本即可,我已经将其更改为 php7.4


对于 php cli,($ php -v)。这对我也有效。 - xavier bs
很好,对我也起作用了。 - jpk

10

可能您的系统中有一个旧的 PHP 版本,比如 PHP 5.6,并且您还安装了 PHP 7.2,因此在您的计算机上存在多个 PHP 版本。有些应用程序是在较早的 PHP 5.6 最新版本开发的,它们仍然在运行,而您正在处理这些应用程序。您可能同时在处理 Laravel ,但 Laravel 需要 PHP 7+ 才能启动。明白了吗?

在这种情况下,您可以在不同的 PHP 版本之间切换以满足您的需求。

从 PHP 5.6 切换到 PHP 7.2

Apache:

sudo a2dismod php5.6
sudo a2enmod php7.2
sudo service apache2 restart

命令行:

sudo update-alternatives --set php /usr/bin/php7.2
sudo update-alternatives --set phar /usr/bin/phar7.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
sudo update-alternatives --set phpize /usr/bin/phpize7.2
sudo update-alternatives --set php-config /usr/bin/php-config7.2

反之亦然,从 PHP 7.2 切换到 PHP 5.6

Apache:-

sudo a2dismod php7.2
sudo a2enmod php5.6
sudo service apache2 restart

命令行:

sudo update-alternatives --set php /usr/bin/php5.6
sudo update-alternatives --set phar /usr/bin/phar5.6
sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6
sudo update-alternatives --set phpize /usr/bin/phpize5.6
sudo update-alternatives --set php-config /usr/bin/php-config5.6

如果您已安装了phpX.Y-dev,则可以使用phpize和php-config命令。 - TonyG

8
您可以使用以下命令行在两个PHP版本之间进行切换。
例如,我想将PHP版本从7.1切换到7.2,我们可以使用以下命令。
sudo a2dismod php7.1 &&  sudo update-alternatives --set php /usr/bin/php7.2 && sudo a2enmod php7.2 && sudo service apache2 restart

a2dismod 用于禁用当前的PHP版本,a2enmod 用于启用该版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接