【问题标题】:Switch php versions on commandline ubuntu 16.04在命令行 ubuntu 16.04 上切换 php 版本
【发布时间】: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之间切换呢?

【问题讨论】:

标签: php apache command-line-interface php-5.6 php-7.1


【解决方案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 重启
  1. 用于启用其他 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
                        

                        检查更改:

                        1. 在控制台中运行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 提供

                        1. 通过添加 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)。它也适用于我。
                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2019-06-12
                        • 2013-04-18
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多