对一个命令使用不同的 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,默认解释器是5.4。所以我发出另一个命令:php

$ /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

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

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

我不想更改变量或修改文件,例如,或Laravel的CLI实用程序。$PATHcomposercomposer.jsonartisan


编辑:还假设我想从常规用户帐户执行此操作(即没有root权限)。


答案 1

可以使用以下命令找到默认的 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版本。


答案 2

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

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

推荐