一尘不染

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

linux

所以我安装了三个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文件以以下shebang开头:

#!/usr/bin/env php

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

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

我不想改变$PATH变量或修改文件一样composercomposer.json或者Laravel的CLI工具artisan


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


阅读 478

收藏
2020-06-03

共1个答案

一尘不染

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

$ 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) ...
2020-06-03