欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

linux two php versions command line php --version 两个版本 apache 多个版本 命令行 如何使其变成自己想要的版本

为一个命令使用不同的PHP版本CLI可执行文件

所以我有安装了三个PHP版本的Gentoo框(从来没有理由):

  1. /usr/bin/php - > /usr/lib64/php5.4/bin/php

  2. /usr/bin/php5.5 - > /usr/lib64/php5.5/bin/php

  3. /usr/bin/php5.6 - > /usr/lib64/php5.4/bin/php

我想使用作曲者安装Laravel框架

$ composer create-project laravel/laravel --prefer-dist

然而,这会引发错误,因为Laravel需要PHP> 5.5.9,默认php解释器为5.4。所以我发出另一个命令:

$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist

这需要我一步,但是后来Laravel的一些后期安装命令composer.json发挥作用,并且安装崩溃。

这是因为这个composer.json命令看起来像这样:

"post-install-cmd": [
    "php artisan clear-compiled",
    "php artisan optimize"
],

您可以看到,“默认”解释器再次使用!

现在,正确的PHP文件以下列方式开始:

#!/usr/bin/env php

这是很好的功能,因为PHP解释器可以在不同的系统上的不同位置找到。不幸的是,在这种情况下,env命令返回到在$PATH环境变量中找到的第一个可执行文件的路径。

我怎么可能改变当前的会话环境,或者为执行整个Laravel安装过程php命令执行什么样的技巧,/usr/bin/php5.6而不是调用/usr/bin/php

我不想更改$PATH变量或修改文件composercomposer.json或Laravel的CLI实用程序artisan


编辑:也假设我想从常规用户帐户(即没有root权限)这样做。

分享改善这个问题
 
   
如何创建临时符号链接并稍后恢复?也看看GNU stow -  Arkadiusz Drabczyk 7月3日'15在12:45
   
您将需要制作一个自定义包装器脚本,PHP_BIN例如为导出的环境变量提供荣誉,或者默认为/usr/bin/php其他。(另见在Bash,什么时候别名,什么时候脚本,什么时候写一个函数?) - 另外,一旦你安装了三个以上的版本,你就是正式的囤积者。 -  马里奥 7月3日'15在12:50
   
关于alias:可悲的是这不行。也许是因为alias当不工作php是通过调用composer 通过/usr/bin/env -  室内 7月3日星期三13:50
   
完美答案 谢谢。 -

也许你可以尝试修复环境!

$ php -v
PHP 5.4.x (cli) ...
$ set PATH="/usr/lib64/php5.6/bin:$PATH"
$ php -v
PHP 5.6.x (cli) ...

或者,如果您不想修改shell会话的PATH,则可以仅对当前命令进行更改:

$ php -v
PHP 5.4.x (cli) ...
$ env PATH="/usr/lib64/php5.6/bin:$PATH" php -v
PHP 5.6.x (cli) ...
$ php -v
PHP 5.4.x (cli) ...
分享改善这个答案
 
1 
这就对了!我已经输入:PATH="/usr/lib64/php5.6/bin:$PATH" php /usr/bin/composer create-project laravel/laravel --prefer-dist安装完成成功!PATH使用命令一行设置不会更改全局PATH变量。感谢很多Guillaume Crico! -  roomcays 8月12日'15在10:15
 


正确答案
确定当前通用php命令的位置以及它指向的二进制文件which php

它会给你一个符号链接的路径,就像你在问题中提到的那样

/usr/bin/php -> /usr/lib64/php5.4/bin/php

编辑符号链接以指向您想要的任何php版本,请参见此处https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks

完成后,只需反转该过程。

更新:您还可以alias通过编辑~/.bashrc并添加以下内容为当前用户添加一个

alias php='/usr/bin/php5.6'

看看这是否奏效

分享改善这个答案
 
   
这个答案和Arkadiusz Drabczyk的评论是有效的,但我忘了提及,我不能修改系统符号链接(/usr/bin/*),因为整个操作都是从普通用户帐户(无root)完成的。 -  roomcays 7月3日'15在13:38
   
更新的答案,虽然我看到@mario已暗示alias -  亚历克斯Andrei 7月3日'15在13:45
   
谢谢,我alias在评论中回答了我的问题。 -  室内 7月3日星期三13:50

由于PHP7来临,Debian Linux默认为/ usr / bin中的PHP版本5和7创建不同的可执行文件(如果您同时安装了这两个版本)。

从命令行调用这些不同的版本就像以前一样简单:

kkarski@debian:~ $ php5 -v
PHP 5.6.26-0+deb8u1 (cli) (built: Sep 21 2016 12:37:50) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies


kkarski@debian:~ $ php -v
PHP 7.0.9-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.9-1~dotdeb+8.1, Copyright (c) 1999-2016, by Zend Technologies

这显然只适用于简单的脚本。对于任何更大的(作曲家,工匠等),您将必须更改PATH变量。

要更改Apache服务器正在使用的版本,您需要做的是:

root@debian:~# a2dismod php5 && a2enmod php7.0
Module php5 disabled.
To activate the new configuration, you need to run:
  service apache2 restart
Considering conflict php5 for php7.0:
Enabling module php7.0.
To activate the new configuration, you need to run:
  service apache2 restart

如果要使用较低的PHP版本,反之亦然。

提到它,以防有人在Debian有类似的问题。

分享改善这个答案
 
   
我正在努力改变版本完全...但你的解决方案保存了我的一天... +1从我..谢谢一吨... -  赛扬王子 3月30日在5:45

默认PHP可执行文件可以使用:

$ which php

在大多数情况下,它链接到特定的PHP版本:

lrwxrwxrwx 1 root root      21 aug 15  2016 /usr/bin/php -> /usr/bin/php7.1

要将其更改为不同的版本,只需将其重新链接到另一个

$ sudo rm /usr/bin/php

$ sudo ln -s /usr/bin/php5.6 /usr/bin/php

我使有的是  ln -s /www/wdlinux/apache_php-5.6.9/bin/php /usr/bin/php

在重新链接之前,您必须确保安装目标PHP版本。

分享改善这个答案
 

来自 https://stackoverflow.com/questions/31206864/use-different-php-version-cli-executable-for-one-command


普通分类: