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


108

我已经在Ubuntu 16.04上安装了php 5.6和php 7.1

我知道使用Apache作为我的Web服务器,我可以

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

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

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

php -S localhost:8888

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


Answers:


246

互动切换模式

sudo update-alternatives --config php

手动切换

从PHP 5.6 => PHP 7.1

系统上已设置默认的PHP 5.6,您需要切换到PHP 7.1。

阿帕奇:

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

命令行:

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

从PHP 7.1 => PHP 5.6

系统上已设置默认的PHP 7.1,并且您需要切换到PHP 5.6。

阿帕奇:

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

命令行:

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

资源


1
sudo update-alternatives --set php /usr/bin/php5.6这个命令节省了我的时间。.谢谢@StevieG
Ask Bytes

你是最好的兄弟...非常感谢。
Fendi Septiawan

apache2重新启动时出现分段错误。然后,我发现我一次启用了多个PHP版本。在启用5.6之前,我必须同时禁用7.1和7.2。
donquixote18年

确实,我只是使用此解决方案将php -v7.2更改为7.1!它既简单又伟大。
SaidbakR

伟大的建议也在这里-askubuntu.com/questions/761713/…。顺便说一句,您可以安装几个php模块-例如5.6、7.0、7.1、7.2,然后对给定版本的php遇到某些错误(例如,create_function从php 7.2开始不再受支持)进行处理。)
Vadim Anisimov

121

在命令行中键入此命令,应该适用于16.04、18.04和20.04之间的所有ubuntu。

$ sudo update-alternatives --config php

这就是你会得到的

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:

选择合适的版本


2
这应该是答案
itsazzad

为什么要用php7.2两次?
维加沙

@SandOfVega这是命令的输出,如果我猜这是默认值,则可能显示2次,但是输出可能会有所不同。
GiorgosK

Ubuntu 20.04给我“错误:PHP
别无选择

@burzum在Ubuntu 20.04上运行良好。
Pothi Kalimuthu

13

我想你应该试试看

从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
给您的答案足够的解释,以了解此代码为何起作用及其含义。这样,答案将对遇到相同问题的用户很有用。请参阅链接以了解如何编写好的答案。
吉诺·沙吉

12

我实际上不建议将a2enmodPHP 5或7用于update-alternatives。我会使用。您可以sudo update-alternatives --config php设置要使用的系统范围的PHP版本。这使您的命令行和apache版本工作相同。您可以update-alternatives手册页上了解更多信息。


1
它对我不起作用。即使我尝试选择后,PHPINFO仍显示始终相同的版本。
brunoramonalmeida


10

您可以创建一个脚本以从版本切换: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 [VERSION_NUMBER]在参数为7或5.6的地方键入

就这样,您现在可以轻松地从PHP7切换到PHP 5.6!


看起来很有希望,但是当您使用“ ln -sfn ...”时,'n'标志在ln命令中会做什么。我无法在文档中的任何位置找到该标志(“ n”)。
Fakhar Anwar

8

您可以使用以下命令行在两个PHP版本之间进行切换。

例如

我想改用PHP Version7.17.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用于启用该版本


8

可能您的系统中有旧的PHP版本,例如PHP 5.6,并且您也安装了PHP 7.2,因此您的计算机中有多个PHP。当较旧的PHP 5.6是最新版本时,已经开发了一些应用程序,它们仍处于运行状态,并且您正在使用这些应用程序。您可能同时在Laravel上工作,但Laravel需要PHP 7+才能开始。得到图片了吗?

在这种情况下,您可以在PHP版本之间进行切换以满足您的要求。

从PHP 5.6切换=> PHP 7.2

阿帕奇:-

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

阿帕奇:-

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

3

在终端中键入给定命令。

要禁用所选的PHP版本...

    • 须藤a2dismod php5
    • sudo服务apache2重新启动
  1. 用于启用其他PHP版本。

    • 须藤a2enmod php5.6
    • sudo服务apache2重新启动

它将升级Php版本,如果您想降级版本,可以反向进行,可以通过PHP_INFO()看到它;


3

使用以下命令从PHP 5.6切换到PHP 7.2:

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

使用以下命令从PHP 7.2切换到PHP 5.6:

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

3

您可以使用这些开放源代码的PHP Switch脚本,这些脚本是专门为在Ubuntu 16.04 LTS中使用而设计的。

https://github.com/rapidwebltd/php-switch-scripts

有一个setup.sh脚本可以安装PHP 5.6、7.0、7.1和7.2的所有必需依赖项。完成此操作后,您只需运行以下切换脚本之一即可更改PHP CLI和Apache 2模块版本。

./switch-to-php-5.6.sh
./switch-to-php-7.0.sh
./switch-to-php-7.1.sh
./switch-to-php-7.2.sh

1

从PHP 5.6 => PHP 7.1

$ sudo a2dismod php5.6
$ sudo a2enmod php7.1

对于旧的Linux版本

 $ sudo service apache2 restart

有关最新版本

$ systemctl restart apache2

1

请按照以下步骤操作:

i.e : your current version is : current_version = 7.3 , and you want to change it to : new_version = 7.2

1) sudo a2dismod php(current_version) 
2) sudo a2enmod php(new_version)
3) sudo update-alternatives --config php (here you need to select php version number) 
4) restart apache through : 
  sudo /etc/init.d/apache2 restart OR
  sudo service apache2 restart

1

我制作了一个bash脚本来在Ubuntu上的不同PHP版本之间切换。

希望它能帮助某人。

这是脚本:(将其保存在/usr/local/bin/sphp.sh中,不要忘记使用命令添加+ x标志:sudo chmod + x /usr/local/bin/sphp.sh)

#!/bin/bash

# Usage
if [ $# -ne 1 ]; then
  echo "Usage: sphp [phpversion]"
  echo "Example: sphp 7.2"
  exit 1
fi

currentversion="`php -r \"error_reporting(0); echo str_replace('.', '', substr(phpversion(), 0, 3));\"`"
newversion="$1"

majorOld=${currentversion:0:1}
minorOld=${currentversion:1:1}
majorNew=${newversion:0:1}
minorNew=${newversion:2:1}

if [ $? -eq 0 ]; then
  if [ "${newversion}" == "${currentversion}" ]; then
    echo "PHP version [${newversion}] is already being used"
    exit 1
  fi

  echo "PHP version [$newversion] found"
  echo "Switching from [php${currentversion}] to [php${newversion}] ... "

  printf "a2dismod php$majorOld.$minorOld ... "
  sudo a2dismod "php${majorOld}.${minorOld}"
  printf "[OK] and "

  printf "a2enmod php${newversion} ... "
  sudo a2enmod "php${majorNew}.${minorNew}"
  printf "[OK]\n"

  printf "update-alternatives ... "
  sudo update-alternatives --set php "/usr/bin/php${majorNew}.${minorNew}"
  printf "[OK]\n"

  sudo service apache2 restart
  printf "[OK] apache2 restarted\n"
else
  echo "PHP version $majorNew.$minorNew was not found."
  echo "Try \`sudo apt install php@${newversion}\` first."
  exit 1
fi

echo "DONE!"



0

在Ubuntu 18.04上安装laravel时,请选择默认的PHP 7.3.0RC3安装,但是laravel和symfony将无法正确安装,因为它们会丢失php-xml和php-zip,即使它们已安装。您需要按照上述说明切换到php 7.1,或者,

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

现在,运行laravel新博客,将正确进行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.