Tell Composer使用不同的PHP版本

时间:2015-09-23 22:01:48

标签: 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域上执行此操作,但不能在1和1上执行此操作。

20 个答案:

答案 0 :(得分:18)

Ubuntu 18.04案件...这是我的事。

/usr/bin/php7.1 /usr/local/bin/composer update

答案 1 :(得分:14)

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

所以这对我有用:

php5.6 /usr/bin/composer

答案 2 :(得分:8)

你总是可以这样使用。

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

 php7.4 /usr/local/bin/composer install

php7.4 /usr/local/bin/composer update

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

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

sudo apt-get install -y php7.4-cli

对于 linux/ubuntu 用户来说

干杯;-)

答案 3 :(得分:7)

如果只需要让作曲家忽略版本要求,则可以使用以下方法绕过:

composer install --ignore-platform-reqs

答案 4 :(得分:7)

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

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

"config": {
    "platform": {
        "php": "7.2.6"
    }
}

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

C:\xampp\htdocs\your project name>composer update

答案 5 :(得分:3)

我在1&1(ionos)上也有一个共享的托管帐户,这就是我要做的事情:

如果您以ssh根帐户登录,则可以创建〜/ .bash_profile并添加

alias php="php7.1"
alias composer="php7.1 composer.phar"

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

然后,确保来自开发机的laravel composer.lock文件进入1and1上的项目文件夹并运行

composer install
  

使用来自@tobymackenzie的技巧:在共享主机上,您实际上应该仅从您在自己的计算机上创建的composer.lock文件中运行composer install(而不是更新!)。这样,内存使用率仍然非常低。

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

APP_ENV=local

因为将其设置为生产会在等待您键入yes时引发无限STDIN警告。至少在我看来,是这样。

希望这对某人有帮助。

答案 6 :(得分:2)

有两种方法可以做到。

  1. 告诉 Composer 在终端中运行命令时忽略平台要求。
composer update --ignore-platform-reqs
  1. 告诉 Composer 忽略项目根目录中 composer.json 文件中的平台要求。
"config": {  
    "platform-check": false, 
}, 

答案 7 :(得分:2)

尝试这种方法

ea-php72 /opt/cpanel/composer/bin/composer

答案 8 :(得分:2)

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

PATH="/home/user/bin:$PATH"

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

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

alias php="/path/to/php5"

答案 9 :(得分:1)

通过添加以下配置,我们可以使用 composer.json 文件中的平台配置告诉 Composer,我们的应用程序支持哪个版本的 PHP,

{
"config": {
    "platform": {
        "php": "5.5"
    }
},
"require": {
    ...
 }
}

或者从命令行

composer config platform.php 5.5

答案 10 :(得分:1)

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

"config": {

    "platform": {

        "php": "7.1.3"

    }

}

答案 11 :(得分:0)

Ubuntu 18.04案例...这件事对我来说很有帮助。在这里, Composer自动选择所需的PHP版本

const point = {x: 0, y: 0};
const matrix = ctx.getTransform();
const transformedPoint = {
  x: matrix.a * point.x + matrix.c * point.y + matrix.e,
  y: matrix.b * point.x + matrix.d * point.y + matrix.f,
};

OR

/opt/lampp/bin/php /usr/bin/composer install

答案 12 :(得分:0)

现有答案部分没有回答问题,给出无效的建议或给出不好的建议。

问题说明:

<块引用>

但是,我可以运行 php5.5 composer.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
    
  2. 在你的 composer.json 中创建一个测试脚本

    "scripts": {
        "php-version": "php --version"
    
    }
    

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

    composer php-version
    /usr/bin/php7.2 /usr/bin/composer php-version
    

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

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

    "config": {
        "platform": {
           "php": "^7.2"
        }
    }
    

    对我来说并没有真正改变任何东西:

    /usr/bin/php7.2 /usr/bin/composer php-version
    
    # result is still 7.4
    

    实际上,平台约束可能对解决需求很重要,因此您应该添加它(在您的项目 composer.json 中)。它只是不能解决 Composer 使用正确版本的 PHP 的上述问题。另见Composer docs for platform

答案 13 :(得分:0)

对于使用 Plesk 的人,您需要不同的部分:

  1. /opt/plesk/php/<version/bin/php 获取所需的 PHP 版本,例如 /opt/plesk/php/7.4/bin/php
  2. 通过查看脚本内容 ( /usr/local/bin/composer ) 来获取 Composer 的真实路径,因为 cat /usr/local/bin/composer 是自定义的 Plesk 脚本。就我而言,它是 /usr/local/psa/var/modules/composer/composer.phar
  3. 把它们放在一起:
# /opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar install

... 或者为了更简单,只需在 composer74 中创建一个新文件(我喜欢 /usr/local/bin):

  1. cat > /usr/local/bin/composer74 创建文件
  2. 粘贴以下内容:
#!/bin/bash
/opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar

进入终端

  1. 点击 CTRL+D 保存文件
  2. chmod +x /usr/local/bin/composer74 使其可执行
  3. 随处使用:
# composer74 install

答案 14 :(得分:0)

我对上述任何答案都没有运气,我在 composer.json 中有自动脚本,所以忽略或伪造平台只会导致脚本失败等。在命令中设置 php 版本不起作用!

但是我确实注意到,虽然运行 which phpphp -v 返回了正确的版本 which /usr/bin/env php 返回了 Composer 正在使用的有问题的 php 版本。所以在这里找到了一个很好的答案并概述如下:

问题:

/usr/bin/env php 在当前 php 中查找名为 $PATH 的可执行文件;它不关心别名、shell 函数等。如果你想让它执行 php v5.3,你必须把那个版本放在一个名为 php 的目录下,并将该目录放在你的 PATH 中包含的目录之前的某个位置有问题的版本。

修正:

创建新的 php 可执行文件夹,如下所示,其中链接了您的特定 php 可执行文件:

mkdir /usr/local/bin/php-overrides
ln -s /usr/local/bin/php7 /usr/local/bin/php-overrides/php

将以下内容添加到您的 ~/.bash_profile(或其他适当的启动脚本):

PATH="/usr/local/bin/php-overrides:$PATH"

https://serverfault.com/questions/579956/alias-doesnt-work-in-script-with-usr-bin-env-php

答案 15 :(得分:0)

必须在 composer.json 文件中的两个地方添加以设置不同的 php 版本:

"config": {
    "platform": {
        "php": "7.4"
    }
}
"require": {
    "php": "^7.4",
}

答案 16 :(得分:0)

知道这个问题有点旧...但是如果您将composer下拉到您的应用程序根目录中:

https://getcomposer.org/download/

您可以运行:

而不是依赖全局作曲家。
  

php56 composer.phar {您的命令}

或者我相信较新的homstead版本将是:

  

php7.1 composer.phar {您的命令}

https://laracasts.com/discuss/channels/laravel/run-composer-commands-with-different-php-versions

答案 17 :(得分:0)

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

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

我们在Linux内可以有许多PHP版本,您可以像这样灵活地使用哪个PHP版本来执行:

root@home:~# /usr/bin/php7.1 /usr/local/bin/composer update

或者只是

root@home:~# php7.1 /usr/local/bin/composer
root@home:~# php7.2 /usr/local/bin/composer
root@home:~# php7.3 composer
...

要检查并查找所有已安装的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

答案 18 :(得分:0)

php5.5 composer.phar install失败,因为您的composer.json告诉它运行php而不是php5.5,编辑文件composer.json替换php脚本引用php5.5 1}}。例如:

自:

"post-root-package-install": [
    "php -r \"copy('.env.example', '.env');\""
],

要:

"post-root-package-install": [
    "php5.5 -r \"copy('.env.example', '.env');\""
],

即使这样做,1and1也有脚本执行的内存限制,因此php5.5 composer.phar install不会失败,但也不会完成执行。您仍然可以手动安装后运行脚本。

我已按照本指南将Laravel webapps部署到1and1而没有提交vendor目录:Deploy Laravel Webapp to 1and1

答案 19 :(得分:0)

您可以尝试将php和php-config文件复制到/ usr / local / bin中。该路径具有更高的优先级顺序,应覆盖/ usr / bin文件夹,而无需禁用SIP。这就是我所做的。