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

n6lpvg4x  于 2023-03-04  发布在  PHP
关注(0)|答案(9)|浏览(165)

因此,我有Gentoo盒安装了三个PHP版本(不管原因):

  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 framework
$ 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权限)执行此操作。

vdgimpew

vdgimpew1#

我使用了"脚本+docker映像"来在开发过程中随时提供多个PHP版本:https://github.com/jclaveau/docker-php-multiversion
您可以按以下方式使用它:

$ php 5.6 -v
PHP 5.6.40-15+ubuntu18.04.1+deb.sury.org+1 (cli) 
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
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans

$ php 7.3 -v
PHP 7.3.13-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Dec 18 2019 14:48:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.13, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.13-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.9.0, Copyright (c) 2002-2019, by Derick Rethans

由于它使用www.example.com,因此您不需要更改系统配置的任何部分。Docker.io, you do not need to alter any part of your system configuration.
希望能帮到你

vxbzzdmp

vxbzzdmp2#

我对composer有这样的要求,它要求PHP在一个多租户系统上是一个特定的版本,这最终会影响其他Web应用程序。我不能更新整个系统的PHP符号链接,我需要切换PHP版本只为这个特定的执行,所以我结束了以下内容。

php80 `which composer` install

注意:只要你安装了不同版本的PHP,它就可以正常工作。

`which composer` - expands to the path of the composer binary, so you do not have to type the full path.
d8tt03nd

d8tt03nd3#

默认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版本已经安装。

bvpmtnay

bvpmtnay4#

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

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

6kkfgxo05#

使用which php确定当前通用php命令的位置及其指向的二进制文件。
它将为您提供一个符号链接的路径,就像您在问题中提到的那样
/usr/bin/php -> /usr/lib64/php5.4/bin/php
编辑符号链接指向你现在想要的php版本,看这里https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks
当你完成后,只需颠倒这个过程。
UPDATE:您还可以通过编辑~/.bashrc并添加以下内容来为当前用户添加alias
alias php='/usr/bin/php5.6'
看看这是否行得通

zvms9eto

zvms9eto6#

自从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

这显然只适用于简单的脚本,对于更大的脚本( composer 、工匠等),你必须改变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上有类似的问题,请提到它。

sycxhyv7

sycxhyv77#

我发现最简单的方法是创建一个软链接,例如

ln -s /opt/php-7.0.32/bin/php /usr/bin/php7

ln -s /opt/php-7.1/bin/php /usr/bin/php71

ln -s /opt/php-5.6/bin/php /usr/bin/php56

然后,当你使用你的默认版本说它是php7.2作为替代版本,你可以php7php71php56
这里ln -s /opt/php-7.1/bin/php /usr/bin/php71是源/原始文件,/usr/bin/php7是目标/链接

cidc1ykv

cidc1ykv8#

对于那些在上面没有找到解决方案的人,因为他们使用composer update,不知何故使用了错误的PHP版本。通过使用composer self-update,我得到了一些更多的信息,最终发现在composer.json中,你可以在config部分指定platform,它覆盖了Composer使用的PHP版本。简单地更改这个值或删除这个配置就解决了我的问题。

编写器.json"config": { "platform": { "php": "7.1" },

ijxebb2r

ijxebb2r9#

可以使用alias来实现,但请记住,别名在默认情况下不会展开。
您还必须启用这些扩展。

$ shopt -s expand_aliases
$ alias php="/usr/local/bin/php-5.6"
$ ./some-script.sh
$ unalias php # back to previous version

相关问题