在命令行 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”)。 @FakharAnwarman 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.04(18.04 和 20.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 Version
从7.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.04
PHP 8.0
和PHP 7.4
版本之间切换:
降级 PHP 8.0
到 PHP 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.4
到 PHP 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 版本的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu16.04搭载nginx。然后更换nginx适配的PHP的版本的操作 || Ubuntu PHP版本切换
---------已搬运---------ubuntu16.04搭载nginx。然后更换nginx适配的PHP的版本的操作 || Ubuntu PHP版本切换