在命令行中切换php版本

我已经在我的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之间切换呢?

511136 次浏览

我实际上不建议在php 5或7中使用a2enmod。我将使用update-alternatives。你可以通过sudo update-alternatives --config php来设置你想要使用哪个系统范围的PHP版本。这使得您的命令行和apache版本工作相同。你可以在手册页上阅读更多关于update-alternatives的内容。

交互切换模式

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

手动切换

From 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

From 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

Source .

你可以创建一个脚本来切换版本: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切换到phph5.6 !

我觉得你应该试试这个

从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
$ 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:

选择合适的版本

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

禁用所选PHP版本…

    <李> < ul >
  1. Sudo a2dismod php5
  2. Sudo服务apache2重启
  3. 李< / ul > < / >
  4. 启用其他PHP版本....

    • Sudo a2enmod php5.6
    • Sudo服务apache2重启
    • 李< / ul > < / >

它会升级Php版本,如果你想降低版本,也一样,你可以通过PHP_INFO();

从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

你可以使用这些开源的PHP Switch脚本,它们是专门为Ubuntu 16.04 LTS设计的。

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

有一个setup.sh脚本,用于安装PHP 5.6、7.0、7.1和amp所需的所有依赖项;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

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

sudo update-alternatives --config php

或者手工操作

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

从PHP 5.6 => PHP 7.1

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

对于旧的Linux版本

 $ sudo service apache2 restart

对于最新版本

$ systemctl restart apache2
你可以使用下面的脚本在PHP版本之间轻松切换 我也包含了phpize配置

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

下载脚本文件并运行

sh switch.sh

当在Ubuntu 18.04上安装laravel时,默认选择PHP 7.3.0RC3 install,但是laravel和symfony将无法正常安装,即使它们已经安装了,也会抱怨缺少PHP -xml和PHP -zip。你需要切换到php 7.1,使用上面的说明或,

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

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

您可以使用下面的命令行在两个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用于启用该版本

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

请按以下步骤操作:

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

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

希望它能帮助到别人。

以下是脚本: (保存在/usr/local/bin/sphp.sh,不要忘记用命令sudo chmod +x /usr/local/bin/sphp.sh)

.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!"

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) PHP集团 Zend Engine v4.0.3,版权所有(c) Zend Technologies 与Zend OPcache v8.0.3,版权所有(c),由Zend Technologies

PHP 7.4.16 (cli) (built: Mar 5 2021 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版本)

这招对我很管用:-

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

只要把PHP版本改为你需要的任何版本,我已经把它改为php7.4