如何在Ubuntu 14.04上更改php-cli版本?

103

我刚开始使用Linux并且在更改一些php设置时出现了问题。

如果我执行一个包含 phpinfo(); 的php脚本,它会显示php版本为5.6, 但是通过命令行运行 php -v,它会返回7.0版本。

我想让这两个版本匹配。
如何修复我的命令行PATH以便同时使用php 5.6?


检查两个ini文件。 - Chetan Ameta
更清晰地表述问题,不改变或添加任何细节。作者可能不是以英语为母语。希望这可以帮到你。 - indivisible
8个回答

250
sudo update-alternatives --set php /usr/bin/php5.6
请参考:

如果我只有一个版本,需要安装更多怎么办? - Čamo
2
这改变了 PHP 的 CLI 版本,但浏览器版本仍然是相同的。 - Black

76

这里是更交互式的方式:

update-alternatives --config php

你将看到所有可用版本的列表,并选择其中一个。


9
新的回答应该是这样的,这样更好且更少出错、节省时间。 - Neo
如果没有更多的选择怎么办?该命令显示通知:在链接组php中只有一个可选项(提供/usr/bin/php):/usr/bin/php7.2。无需配置。 - Čamo
@Čamo,update-alternatives 允许你从系统中安装的版本列表中设置默认的 PHP 版本,那么... 除了 PHP7.2,你安装了其他什么东西吗? - Dmitry

45

从PHP 7.1 => PHP 5.6

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

从 PHP 5.6 => PHP 7.1

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

您可以根据需要更改版本。

您可以查看此教程

祝好!!


非常感谢!我是真的非常非常感激! - MagisterMundus

41

本说明基于Ubuntu 16.04,但预计在其他版本中也适用

这里的大多数答案通过使用命令来操纵php版本

sudo update-alternatives --set ...

虽然这个命令非常实用,但它从未详细解释它到底是做什么的。下面是解释,包括备份和一些选项:

获取信息

  • 命令update-alternatives显示或更改符号链接,这些链接位于Ubuntu中通常定义为/etc/alternatives的备选方向中,但也可以更改。
  • update-alternatives相关的所有选项的完整列表可以使用命令update-alternatives --help显示,深入解释可以使用man update-alternatives显示。
  • 由于命令update-alternatives主要更改特殊文件夹中的符号链接,因此该文件夹的内容也可以使用常见命令显示,以下显示以php开头的所有项目:
 $ ls -al /etc/alternatives/php*  
lrwxrwxrwx 1 root root 15 Jan 19 02:58 /etc/alternatives/php -> /usr/bin/php7.2  
lrwxrwxrwx 1 root root 31 Jan 19 02:58 /etc/alternatives/php.1.gz -> /usr/share/man/man1/php7.2.1.gz  
lrwxrwxrwx 1 root root 19 Jan 19 03:00 /etc/alternatives/php-cgi -> /usr/bin/php-cgi7.2  
lrwxrwxrwx 1 root root 35 Jan 19 03:00 /etc/alternatives/php-cgi.1.gz -> /usr/share/man/man1/php-cgi7.2.1.gz 
lrwxrwxrwx 1 root root 23 Jan 19 03:00 /etc/alternatives/php-cgi-bin -> /usr/lib/cgi-bin/php7.2
要使用命令update-alternatives显示项目,请使用以下命令:
  • update-alternatives --display [name]
$ update-alternatives --list php  
/usr/bin/php7.0  
/usr/bin/php7.2
要显示更多细节,您可以执行以下操作:
  • 执行以下操作:
$ update-alternatives --display php
php - auto mode
  link best version is /usr/bin/php7.2
  link currently points to /usr/bin/php7.2
  link php is /usr/bin/php
  slave php.1.gz is /usr/share/man/man1/php.1.gz
/usr/bin/php7.0 - priority 70
  slave php.1.gz: /usr/share/man/man1/php7.0.1.gz
/usr/bin/php7.2 - priority 72
  slave php.1.gz: /usr/share/man/man1/php7.2.1.gz
最后我们还想知道可以链接哪些php版本。以下命令显示了/usr/bin/中当前可用的php版本列表:
ls /usr/bin/php*
$ ls -al /usr/bin/php*
lrwxrwxrwx 1 root root      21 Jan  1 19:47 /usr/bin/php -> /etc/alternatives/php
-rwxr-xr-x 1 root root 4385840 Apr  5 18:13 /usr/bin/php7.0
-rwxr-xr-x 1 root root 4875488 Apr  5 18:10 /usr/bin/php7.2
lrwxrwxrwx 1 root root      25 Jan  1 19:47 /usr/bin/php-cgi -> /etc/alternatives/php-cgi
-rwxr-xr-x 1 root root 4279672 Apr  5 18:13 /usr/bin/php-cgi7.0
-rwxr-xr-x 1 root root 4769272 Apr  5 18:10 /usr/bin/php-cgi7.2
-rwxr-xr-x 1 root root     663 Feb 29  2016 /usr/bin/phpunit

备份信息

  • 要对这些符号链接进行信息备份,只需使用此命令将列表保存到文件中,并将其保存在桌面上(将文件名alternatives-php.txt调整为您的需要):
$ echo "command: update-alternatives --list php" > ~/Desktop/alternatives-php.txt
$ update-alternatives --display php >> ~/Desktop/alternatives-php.txt 
$ echo "command: update-alternatives --display php" >> ~/Desktop/alternatives-php.txt
$ update-alternatives --display php >> ~/Desktop/alternatives-php.txt  
如果你愿意的话,仍然可以像上面展示的那样添加ls命令的结果。
$ echo "command: ls -al /etc/alternatives/php*" >> ~/Desktop/alternatives-php.txt
$ ls -al /etc/alternatives/php* >> ~/Desktop/alternatives-php.txt

...以及可用的PHP版本:

$ echo "command: ls -al /usr/bin/php*" >> ~/Desktop/alternatives-php.txt
$ ls -al /usr/bin/php* >> ~/Desktop/alternatives-php.txt

更改命令行的PHP版本

  • 如果我们首先过滤man文档,那么/etc/alternatives/php*目录中的列表包含3行:
 $ ls -al /etc/alternatives/php*  
lrwxrwxrwx 1 root root 15 Jan 19 02:58 /etc/alternatives/php -> /usr/bin/php7.2  
lrwxrwxrwx 1 root root 19 Jan 19 03:00 /etc/alternatives/php-cgi -> /usr/bin/php-cgi7.2  
lrwxrwxrwx 1 root root 23 Jan 19 03:00 /etc/alternatives/php-cgi-bin -> /usr/lib/cgi-bin/php7.2
虽然在整个系统中使用一致的链接可能很有用,但另一方面,系统中已经存在几个php版本意味着它被用于开发,并且可以为cli、web和cgi配置不同的php。
应更改哪个符号链接?
通常不会通过在/etc/alternativescli(命令行)中使用符号链接来配置Web的PHP,而通常不会使用cgi版本或cgi配置来使用cli。因此,可以假定仅更改php的符号链接将适用于命令行,可能不需要更改php-cgiphp-cgi-bin。默认情况下,通常链接到最新版本,因此下面的命令使用从/usr/bin/列表中获取的较旧版本:
$ sudo update-alternatives --set php /usr/bin/php7.0
update-alternatives: using /usr/bin/php7.0 to provide /usr/bin/php (php) in manual mode

控制

检查变化:

$: php -v
PHP 7.0.29-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Apr  5 2018 08:34:50) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.29-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies

变更已被接受,使用的版本现在是较旧的版本。

  • 现在我们检查手册页所编写的版本:
$: man php
... [SCROLL DOWN]
VERSION INFORMATION
   This manpage describes php, version 7.0.29-1+ubuntu16.04.1+deb.sury.org+1.
COPYRIGHT
...
这意味着PHP版本与man页面一致,执行命令man php返回当前PHP版本的正确描述,并且没有需要进行手动调整的man页面相关内容。

一个真正的MVP会像这样提供详细的答案。 - Sunhat
如果我只有一个版本,需要添加其他新版本,但不知道该怎么做。我应该从哪里复制到哪里? - Čamo
@Čamo,您可以使用sudo apt list php*列出您Ubuntu版本的所有PHP版本。 - David
@Čamo 可以安装其他版本,但这有点更加复杂,并且受限于较低的版本,如果我没有弄错的话。 - David
@Čamo 至少有几个可用的版本,你可以通过“sudo apt get install php8.0”来安装,而你必须将你要安装的可用包作为命令的最后一部分。 - David
显示剩余2条评论

4

更改之前,请检查您拥有的内容

 php -v

将所有内容更改为php 7.2

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

3

您可以尝试在终端命令行上设置正确的PHP版本路径:

set PATH="/usr/bin/php5.6/bin:$PATH"

修改路径以匹配您自己的PHP 5.6路径(例如,如果它是首先安装的,则可能类似于“/usr/bin/php”)。

在结尾的"$PATH"附加当前路径值,因此不要忘记使用它。


0

Plesk

如果您的服务器使用Plesk进行管理(就像我在查找此问题时所使用的一样),则您可能没有较新的PHP版本在/usr/bin中。

在这种情况下,您的PHP版本将位于/opt/plesk/php中,因此您可以作为超级用户(如果您不是超级用户,请先运行su)使用以下命令来设置您的PHP CLI版本(在此示例中设置为7.3):

echo "alias php='/opt/plesk/php/7.3/bin/php'" >> ~/.bashrc

退出并重新登录,然后......就完成了!

注意事项

  1. 您必须拥有超级用户权限才能运行此操作。
  2. 如果您想将CLI设置为不同的版本,只需在命令中替换7.3为您想要的任何版本(在OP的情况下,这将是5.6)。
  3. 如果您想检查Plesk可用于使用的版本,请运行:ls /opt/plesk/php

来源:Plesk Support


$ which php /usr/bin/php $ mv /usr/bin/php /usr/bin/php-backup $ ln -s /opt/plesk/php/7.3/bin/php /usr/bin/php $ php -v - ButcherFromHell
当您查看 Plesk 安装程序时,可能会发现可以安装的 PHP 版本比您系统上已有的版本更多。 - Thomas

0
对于 PLESK,可以这样操作:
$ which php
/usr/bin/php
$ mv /usr/bin/php /usr/bin/php-backup
$ ln -s /opt/plesk/php/7.3/bin/php /usr/bin/php
$ php -v

并查看可供选择的内容,请执行以下操作:

/usr/local/psa/admin/bin/php_handlers_control --list

如何更改PHP Cli版本


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接