为一个命令使用不同的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

我想用composer安装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文件从下面的shebang开始:

 #!/usr/bin/env php 

这是很好的function,因为PHP解释器可以在不同系统的不同位置下find。 不幸的是,在这种情况下, env命令返回它在$PATH环境variables中find的第一个可执行文件的$PATH

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

我不想更改$PATHvariables或修改composercomposer.json或Laravel CLI实用artisan


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

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

     $ 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) ... 

    确定当前的通用php命令在哪里,以及哪个二进制文件指向which php

    它会给你一个像你提到的问题的符号链接的路径

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

    编辑符号链接,指出你现在想要哪个php版本,看到这里https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks

    当你完成后,只是扭转过程。

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

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

    看看这个工作

    自从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 modulee 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上遇到类似的问题,可以提一下。

    默认的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 

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