在命令行 ubuntu 16.04 上切换 php 版本

Posted

技术标签:

【中文标题】在命令行 ubuntu 16.04 上切换 php 版本【英文标题】:Switch php versions on commandline ubuntu 16.04 【发布时间】:2020-05-27 04:15:09 【问题描述】:

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

我知道使用 Apache 作为我的网络服务器,我可以做到

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之间切换呢?

【问题讨论】:

askubuntu.com/questions/705880/how-to-install-php-7 【参考方案1】:

我实际上不建议将a2enmod 用于php 5 或7。我会使用update-alternatives。您可以使用sudo update-alternatives --config php 来设置要使用的系统范围的 PHP 版本。这使您的命令行和 apache 版本的工作方式相同。您可以在man page 上阅读有关update-alternatives 的更多信息。

【讨论】:

这对我不起作用。即使在我尝试选择之后,PHPINFO 仍然显示始终相同的版本。【参考方案2】:

交互切换模式

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。

阿帕奇:

$ 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。

阿帕奇:

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

命令行:

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

Source

【讨论】:

sudo update-alternatives --set php /usr/bin/php5.6 这个命令节省了我的时间。谢谢@StevieG 你是最好的兄弟...非常感谢。 我在 apache2 重新启动时出现分段错误。然后我发现我一次启用了多个 PHP 版本。在启用 5.6 之前,我必须禁用 7.1 和 7.2。 确实,我刚刚使用此解决方案将 php -v 从 7.2 更改为 7.1!它很棒而且很简单。 在 Ubuntu 18.04 中,我必须执行一些额外的步骤来禁用其他版本或进程将继续运行。 # systemctl stop php5.6-fpm | # systemctl 禁用 php5.6-fpm |要获取 php 进程列表,请执行 # ps -ax | grep php【参考方案3】:

您可以创建一个脚本来切换版本: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”)。 @FakharAnwar man ln: -n, --no-dereference : treat LINK_NAME as a normal file if it is a symbolic link to a directory【参考方案4】:

我觉得你应该试试这个

从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

【讨论】:

为您的答案提供足够的解释,以了解此代码为何有效及其含义。因此该答案对遇到相同问题的用户有用。查看链接了解如何写出好的答案。【参考方案5】:
$ sudo update-alternatives --config php

应该适用于 16.0418.0420.04)之后的所有 ubuntu 版本

这是您应该看到的响应

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:

选择合适的版本

【讨论】:

这个应该是答案 为什么是php7.2两次? @SandOfVega 这是命令的输出,如果它是我猜的默认值,可能会显示 2 次,但您的输出可能会有所不同。 Ubuntu 20.04 给了我“错误:php 没有替代品” @burzum 在 Ubuntu 20.04 上运行良好。【参考方案6】:

在终端中输入给定的命令..

用于禁用选定的 PHP 版本...

    sudo a2dismod php5 sudo service apache2 重启

    用于启用其他 PHP 版本....

    sudo a2enmod php5.6 sudo service apache2 restart

它会升级php版本,如果你想版本降级,同样的事情,你可以通过PHP_INFO()看到它;

【讨论】:

【参考方案7】:

使用以下命令从 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

【讨论】:

【参考方案8】:

您可以使用这些专为在 Ubuntu 16.04 LTS 中使用而设计的开源 PHP 切换脚本。

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

【讨论】:

【参考方案9】:

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

sudo update-alternatives --config php

或者手动操作

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

【讨论】:

【参考方案10】:

从 PHP 5.6 => PHP 7.1

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

对于旧的 linux 版本

 $ sudo service apache2 restart

最新版本

$ systemctl restart apache2

【讨论】:

【参考方案11】:

您可以使用以下脚本轻松切换 PHP 版本 我也包含了 phpize 配置。

https://github.com/anilkumararumulla/switch-php-version

下载脚本文件并运行

sh switch.sh

【讨论】:

【参考方案12】:

在 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 new blog,将正常进行

【讨论】:

【参考方案13】:

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

例如

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

【讨论】:

【参考方案14】:

可能您的系统中可能有一个旧的 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

【讨论】:

【参考方案15】:

请按照以下步骤操作:

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

【讨论】:

【参考方案16】:

我制作了一个 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!"

【讨论】:

【参考方案17】:

ubuntu 20.04PHP 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

检查更改:

    在控制台中运行php -v,你会得到:

PHP 8.0.3 (cli)(构建时间:2021 年 3 月 5 日 07:54:13)(NTS) 版权所有 (c) PHP 集团 Zend Engine v4.0.3,版权所有 (c) Zend Technologies 使用 Zend OPcache v8.0.3,版权所有 (c),由 Zend Technologies 提供

PHP 7.4.16 (cli)(构建时间:2021 年 3 月 5 日 07:54:38)(NTS) 版权所有 (c) PHP 集团 Zend Engine v3.4.0,版权所有 (c) Zend Technologies Zend OPcache v7.4.16,版权所有 (c),由 Zend Technologies 提供

    通过添加 phpinfo(); 在可运行的本地环境中添加一个 PHP 文件,例如 /var/www/html/ 路径,并在浏览器中获取 PHP 信息(在页面顶部可以查看 PHP 版本)

【讨论】:

php-config 或 phpize 没有像其他示例中的更改吗?类似 sudo update-alternatives --set php-config /usr/bin/php-config8.0【参考方案18】:

这对我有用:-

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

只需将PHP版本更改为您需要的任何版本我已将其更改为php7.4

【讨论】:

对于php cli,($ php -v)。它也适用于我。

以上是关于在命令行 ubuntu 16.04 上切换 php 版本的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu怎么切换到命令行模式。

一文彻底解决Ubuntu上PHP的安装以及版本切换

ubuntu16.04搭载nginx。然后更换nginx适配的PHP的版本的操作 || Ubuntu PHP版本切换

---------已搬运---------ubuntu16.04搭载nginx。然后更换nginx适配的PHP的版本的操作 || Ubuntu PHP版本切换

ubuntu16.04上 安装xampp的php扩展memcache

ubuntu16.04改ip地址