Tell Composer使用不同的PHP版本

Boo*_*oom 24 php linux laravel composer-php

我已经被困在这几天了.我正在使用1and1托管,他们的PHP设置有点奇怪.

如果我只使用php composer.phar install,那么我使用PHP 4.4.6,这是非常不足够的.但是,我可以运行php5.5 composer.phar install,稍微进一步,但它仍然失败,因为在某个地方,PHP再次被调用,但它失败了,因为它使用4.4.6.

有没有办法告诉Composer使用该php5.5命令?有没有人成功地在1and1主机上配置了Composer?

我正在努力让Laravel启动并运行(使用Composer).我已经能够在我的GoDaddy域上执行此操作,但不能执行1and1.

Flo*_*rin 32

Ubuntu 18.04案例......这对我而言.

/usr/bin/php7.1 /usr/local/bin/composer update
Run Code Online (Sandbox Code Playgroud)

  • 这与 OP 所做的和对他不起作用的(php5.5composer.phar install)有何根本不同,因为 Composer 调用的命令仍将使用默认的 PHP 版本?自己测试一下,添加“scripts”:“php-version”:“php --version”并调用例如/user/bin/php7.4 /usr/bin/composer php-version。 (3认同)
  • 我已经使用 sudo /opt/lampp/bin/php /usr/bin/composer install 它对我有用谢谢+1 (2认同)
  • @SybillePeters,将您的脚本更改为“php-version”:“/user/bin/php7.4 --version” 我想您可以使用“sudo update”将整个计算机配置为使用“php”的特定版本-替代方案 --set php /usr/bin/php7.4` (2认同)

Jon*_*ins 21

如果您只需要让 composer 忽略版本要求,您可以使用以下方法绕过:

composer install --ignore-platform-reqs
Run Code Online (Sandbox Code Playgroud)

  • 这不会使用不同的 PHP 版本运行 Composer,而是将 Composer 配置为运行另一个 PHP 版本的依赖项解析器。恕我直言,这不能正确回答给定的问题 (3认同)

Dar*_*s.V 20

在xubuntu上我默认使用php 7.2.但是需要用php 5.6运行composer.

所以这对我有用:

php5.6 /usr/bin/composer
Run Code Online (Sandbox Code Playgroud)


小智 12

composer是一个 PHP 二进制脚本,它使用Unix Shebang来定义要执行的解释器。

root@home:~# head /usr/local/bin/composer -n 5

#!/usr/bin/env php
<?php
/*
 * This file is part of Composer.
 *


/usr/bin/php7.1 /usr/local/bin/composer update
Run Code Online (Sandbox Code Playgroud)

因此,如果您在composer没有任何特定选项的情况下运行,它将使用您的 PHP 版本/usr/bin/env php(这是您的默认 PHP)

我们可以在您的 Linux 中安装多个版本的 PHP,您可以像这样灵活地使用哪个 PHP 版本来执行:

root@home:~# /usr/bin/php7.1 /usr/local/bin/composer update
Run Code Online (Sandbox Code Playgroud)

要不就

root@home:~# php7.1 /usr/local/bin/composer
root@home:~# php7.2 /usr/local/bin/composer
root@home:~# php7.3 composer
...
Run Code Online (Sandbox Code Playgroud)

要检查和查找所有已安装的 PHP 包,请转到 /usr/bin/

root@home:~# ls /usr/bin/ | grep php
php
php5.6
php7.1
php7.2
php7.3
php-config
php-config7.1
phpdbg
phpdbg5.6
phpize
phpize7.1
Run Code Online (Sandbox Code Playgroud)


Syb*_*ers 12

现有的答案部分没有回答问题,给出了不起作用的建议或给出了不好的建议。

问题指出:

但是,我可以运行 php5.5composer.phar install,再进一步,但它仍然失败,因为在该过程中,PHP 再次被调用,但它失败了,因为它使用的是 4.4.6。

相反,我在这里展示了一种测试和验证建议的方法。

我希望我自己有一个更好的答案,但我不确定什么是最好的解决方案。就我个人而言,我会选择一个解决方案,确保在主机上使用正确的版本调用 PHP(例如,通过别名或正确设置 PHP 环境,在容器或其他解决方案中运行整个操作),无论 Composer 和添加如何平台 php 约束。

如果您不运行任何脚本,只需要正确解决依赖关系的要求,那么config:platform:php可能会是您的朋友。

假设我们的默认 php 版本是 7.4,但我们的项目需要 7.2。

  1. 检查您的默认 PHP 版本

    命令行:

    # shows version of default PHP
    php --version
    # show path of default PHP
    which php
    
    # show version of /usr/bin/env php
    # /usr/bin/env php --version
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在您的composer.json中创建一个测试脚本

    "scripts": {
        "php-version": "php --version"
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

    现在您可以测试 Composer 调用的命令使用的是哪个版本的 PHP,例如

    composer php-version
    /usr/bin/php7.2 /usr/bin/composer php-version
    
    Run Code Online (Sandbox Code Playgroud)

    就我而言,这两个都使用我的默认 php 脚本(版本 7.4)。因此,虽然 7.2 版本用于运行 Composer,但 Composer 调用的脚本使用默认命令(除非您使用1@php代替)。php

  3. 现在让我们按照一些答案中的建议添加平台设置

    "config": {
        "platform": {
           "php": "7.2.0"
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    不改变脚本执行的任何内容:

    /usr/bin/php7.2 /usr/bin/composer php-version
    
    # result is still 7.4
    
    Run Code Online (Sandbox Code Playgroud)

    实际上,平台选项的重要作用是解决需求,因此您应该添加它(在项目的composer.json 中)。它只是不能解决上述使用正确版本的 PHP 的作曲家问题。另请参阅平台的 Composer 文档


  1. 如果您使用@php而不是php,则 Composer 使用PHP_BINARY2路径,这是phpComposer 尝试推断正在执行的二进制路径。请参阅执行 PHP 脚本。在此示例中,通常与此处$(command -v php7.4)不同。$(command -v php7.2)$(command -v php)
  2. PHP_BINARY是 Composer 为自己的环境( ref )设置的环境变量,类似于PHP 中的预定义PHP_BINARY常量。


Eri*_*cía 10

试试这个方法

ea-php72 /opt/cpanel/composer/bin/composer
Run Code Online (Sandbox Code Playgroud)


小智 10

你总是可以这样使用。

在您拥有 composer.json 文件的项目文件夹中。运行命令

 php7.4 /usr/local/bin/composer install
Run Code Online (Sandbox Code Playgroud)

或者

php7.4 /usr/local/bin/composer update
Run Code Online (Sandbox Code Playgroud)

其中 php7.4 您的特定版本可以是(php7.0、php5.5、php7.3 等...)其中 /usr/local/bin/composer 系统文件夹与 composer 路径

!!!你应该有 php7.4-cli

sudo apt-get install -y php7.4-cli
Run Code Online (Sandbox Code Playgroud)

linux/ubuntu 用户的方式

干杯;-)


Ern*_*kem 10

我遇到了同样的问题,这就是我如何能够弄清楚如何在共享主机上使用不同的 PHP 版本运行 Composer,而不破坏系统:)

幸运的是,使用不同 PHP 版本的 Composer 解决这个问题非常简单。

发现:

默认 PHP 不是从 /usr/local/bin 或类似文件夹运行。使用

which php
Run Code Online (Sandbox Code Playgroud)

或者

whereis php
Run Code Online (Sandbox Code Playgroud)

不会给你最好的答案。


请遵循以下简短指南:

首先找到您的 Composer 二进制文件本身的实际路径。在我的共享托管服务器上,它位于

/opt/cpanel/composer/bin/composer
Run Code Online (Sandbox Code Playgroud)

我相信大多数使用 cPanel 的托管提供商都会有这样的作曲家路径。

接下来,为您要使用的 PHP 版本创建一个别名。在我的项目中,我需要 php 7.4 或更高版本。

如前所述,主机使用 cPanel,服务器使用的实际默认 PHP 版本位于路径中/opt/cpanel/

您应该在(以ea-phpxx/opt/cpanel/为前缀)中看到不同版本的 php,例如,对于php 7.4,它将是一个名为ea-php74 的文件夹,对于PHP 8.0,它将是一个名为ea-php80的文件夹。

现在,确保 php 存在于与此类似的路径中:

/opt/cpanel/ea-php80/root/usr/bin
Run Code Online (Sandbox Code Playgroud)

如果您php在该文件夹中找到,那么您现在可以为其添加别名,如下所示:

alias php='/opt/cpanel/ea-php80/root/usr/bin/php'
Run Code Online (Sandbox Code Playgroud)

通过运行测试别名是否正常工作

php --version 
Run Code Online (Sandbox Code Playgroud)

并检查 php 版本,如下图所示:

在此输入图像描述


现在,正常运行 Composer。例如

 php /opt/cpanel/composer/bin/composer update
 php /opt/cpanel/composer/bin/composer install
 php /opt/cpanel/composer/bin/composer install
Run Code Online (Sandbox Code Playgroud)

还记得我们是如何在 /opt/cpanel/composer/bin/composer 找到 Composer 二进制文件的吗?如果这与您服务器上的 compser 二进制文件的路径不匹配,请使用适当的路径。

我希望这有帮助。快乐编码!


小智 8

我在 1&1 (ionos) 上也有一个共享主机帐户,这是我必须做的:

如果您以 root ssh 帐户登录,则可以创建一个 ~/.bash_profile 并添加

alias php="php7.1"
alias composer="php7.1 composer.phar"
Run Code Online (Sandbox Code Playgroud)

以便您现在可以使用通常使用的命令并且它可以正常工作。(将 composer.phar 放在您的项目文件夹根目录中)

然后,确保你的开发机器上的 laravel composer.lock 文件到达 1and1 上的项目文件夹并运行

composer install
Run Code Online (Sandbox Code Playgroud)

使用来自@tobymackenzie 的这个提示:在共享主机上,您真的应该从您在自己的机器上创建的 composer.lock 文件运行 composer install (而不是更新!)。这样内存使用量仍然很低。

我的工匠命令仍然存在 STDIN 问题,因此请确保将 .env 文件更改为

APP_ENV=local
Run Code Online (Sandbox Code Playgroud)

因为将它设置为 production 会在等待您输入时抛出无限的 STDIN 警告yes。至少在我看来确实如此。

希望这可以帮助某人。


Sha*_*gli 8

只需将以下代码添加到您的composer.json文件即可设置不同的php版本。

"config": {

    "platform": {

        "php": "7.1.3"

    }

}
Run Code Online (Sandbox Code Playgroud)

  • 我想这并不是OP真正想要的答案,但它与问题的标题非常匹配,并且可能对通过网络搜索到达这里的人们有很大帮助,就像对我一样。 (18认同)
  • 这不会使用不同的 PHP 版本运行 Composer,而是将 Composer 配置为运行另一个 PHP 版本的依赖项解析器。恕我直言,这不能正确回答给定的问题 (5认同)

Lah*_*ara 7

就我而言,Composer 检测到 PHP 版本为 7.2.6,但我的实际 PHP 版本为 8.0.2。因此,我执行了以下步骤,这对我来说是解决方案。

步骤 01:-将以下代码添加到您的 composer.json 文件中

"config": {
    "platform": {
        "php": "7.2.6"
    }
}
Run Code Online (Sandbox Code Playgroud)

步骤 02:-然后,运行以下命令。

C:\xampp\htdocs\your project name>composer update
Run Code Online (Sandbox Code Playgroud)


ber*_*nie 5

您可以更改您的PATH版本以覆盖 php 版本。

PATH="/home/user/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

/home/user/bin(或任何其他目录)中创建一个名为 php 的符号链接到 php5 二进制文件。

另一种选择是使用 shell 别名:

alias php="/path/to/php5"
Run Code Online (Sandbox Code Playgroud)