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

     2023-02-18     127

关键词:

【中文标题】在命令行 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 上更新 nodejs

...时间】:2017-05-0222:22:43【问题描述】:我最近在使用node-v命令时在我的ubuntu16.04中查看节点版本,它显示我的版本为6.9.1,但是当nodejs-v它显示6.9.2之前使用此命令之前npmupdate命令是用过。现在node-v和nodejs-v有什么区别?以及如何... 查看详情

如何在 linux ubuntu 16.04 上安装 SDK 管理器?

...://dl.google.com/android/repository/sdk-tools-linux-3859397.zip下载的SDK命令行工具安装AndroidSDK在我的LinuxUbu 查看详情

如何在 MacOS 上切换命令行工具

】如何在MacOS上切换命令行工具【英文标题】:HowtoswitchcommandlinetoolsonMacOS【发布时间】:2018-06-0512:57:28【问题描述】:我在我的mac上安装了两个命令行工具。所以我想切换命令行工具。我该怎么做?我尝试从Xcode首选项>位置>... 查看详情

ubuntu命令行模式与图形桌面切换方法

参考技术AUbuntu命令行模式与图形桌面Ubuntu提供两种进入方式,一个是我们平常最熟悉的图形界面形式,还有一种是纯命令行方式,1、按Ctrl+Alt+(F1~F6中的任意一个)即可进入纯命令行模式。   进入后,需要输入用户名,... 查看详情

在 Ubuntu 16.04 上,Supervisor 不会在启动时启动 [关闭]

...【发布时间】:2016-11-2720:34:08【问题描述】:我使用以下命令在Ubuntu16.04上安装了Supervisor:sudoapt-getinstallsupervisor如果我使用以下命令运行,Supervisor3.2.0-2 查看详情

如何在运行 Virtualmin 控制面板的 ubuntu 16.04 上安装 php 5.6

】如何在运行Virtualmin控制面板的ubuntu16.04上安装php5.6【英文标题】:howtoinstallphp5.6onubuntu16.04runningVirtualminControlPanel【发布时间】:2019-02-1205:17:12【问题描述】:我已经多次尝试让php5.6在ubuntu16.04上运行在尝试浏览http://domain.com/phpi... 查看详情

在 Ubuntu 16.04 上运行“helm init”命令时,deployments.extensions 被禁止错误

】在Ubuntu16.04上运行“helminit”命令时,deployments.extensions被禁止错误【英文标题】:deployments.extensionsisforbiddenerrorwhenrunning`helminit`commandonUbuntu16.04【发布时间】:2019-09-0818:37:51【问题描述】:我正在尝试为我的Kubernetes集群安装Kuber... 查看详情

如何在ubuntu16.04上安装anacondapythondistribution

...包的集合,并提供免费和付费版本。Anaconda分发带有conda命令行实用程序。您可以通过阅读Anaconda文档页面了解有关Anaconda和conda的更多信息 。本教程将指导您在Ubuntu16.04服务器上安装Anaconda的Python3版本。先决条件在开始本指南... 查看详情

如何在ubuntu16.04上安装anacondapythondistribution

...包的集合,并提供免费和付费版本。Anaconda分发带有conda命令行实用程序。您可以通过阅读Anaconda文档页面了解有关Anaconda和conda的更多信息。本教程将指导您在Ubuntu16.04服务器上安装Anaconda的Python3版本。先决条件在开始本指南之前... 查看详情

在 Ubuntu 16.04 上执行命令 sudo apt-get update 后出现以下错误

】在Ubuntu16.04上执行命令sudoapt-getupdate后出现以下错误【英文标题】:Gettingfollowingerrorafterthecommandsudoapt-getupdateonUbuntu16.04【发布时间】:2017-05-0518:56:28【问题描述】:我对Linux命令一无所知,但我忍不住问为什么在命令sudoapt-getupda... 查看详情

让ubuntu16.04开机进入命令行模式

让ubuntu16.04开机进入命令行模式使用Ubuntu时,有时候我们不想开机进入桌面,想直接进入命令行,这样启动的比较快,1、首先我们修改grub文件,改为如图所示: sudogedit /etc/default/grub改完之后,保存退... 查看详情

sh在ubuntu16.04上安装php7的phalconphp(代码片段)

查看详情

ubuntu16.04怎么用命令行关机重启

用reboot命令,linux的重启命令是通用的。操作演示:操作设备:戴尔电脑操作系统:win10操作软件:linux1、连接ubuntushell,连接成功后如下图所示2、在窗口的光标处输入reboot命令,下图红色方框处已输入好3、输入好上面的命令后... 查看详情

在 ubuntu 服务器 16.04 上安装 psycopg2 时出错

...r16.04【发布时间】:2020-01-1603:30:18【问题描述】:错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为1----------------------------------------错误:命令出错,退出状态为1:/home/mosi/venv/b 查看详情

无法在 ubuntu 16.04 上安装 mysql

】无法在ubuntu16.04上安装mysql【英文标题】:unabletoinstallmysqlonubuntu16.04【发布时间】:2018-06-0906:47:42【问题描述】:我运行了以下命令wgethttp://repo.mysql.com/mysql-apt-config_0.8.9-1_all.debsudodpkg-imysql-apt-config_0.8.9-1_all.debsudoapt-getupdate 查看详情

降级 Ubuntu(18.04 到 16.04)或使 php 在 apach2 上工作

】降级Ubuntu(18.04到16.04)或使php在apach2上工作【英文标题】:DowngradeUbuntu(18.04to16.04)ormakephponapach2work【发布时间】:2018-10-0617:05:45【问题描述】:我是这个论坛的新人,如果我的主题不符合规则或不在好地方,我很抱歉,这是我... 查看详情

---------已搬运---------ubuntu16.04搭载nginx。然后更换nginx适配的php的版本的操作||ubuntuphp版本切换(代码片段)

目录:一、Ubuntu16.04安装php5.6以及php5.6与php7.0的切换(apache下)二、ubuntu16.04搭载nginx。然后更换nginx适配的PHP的版本的操作2.配置php:3.当PHP版本没了的时候:三、nginx的一些学习一、Ubuntu16.04安装php5.6以及php5.6与php7.0的切... 查看详情

ubuntu怎么从图形桌面切换到命令行界面

组合键可以切换到命令行界面:\x0d\x0actrl+alt+f1\x0d\x0a这里f1到f6都可以,f7就是回到图形界面。\x0d\x0a\x0d\x0a可以使用终端嘛,ctrl+alt+t就打开了。参考技术AUbuntu从图形桌面切换到命令行界面方法/步骤:第一... 查看详情