告诉 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。

250488 次浏览

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

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

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

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

alias php="/path/to/php5"

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

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

来自:

"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不会失败,但也不会完成它的执行。您仍然可以在安装后手动运行脚本。

我在没有提交 vendor目录的情况下将 Laravel webapps 部署到1and1,遵循以下指南: 将 Laravel Webapp 部署到1and1

在 xubuntu 上,我默认使用的是 php 7.2,但是需要用 php 5.6运行作曲家。

所以这对我很有用:

php5.6 /usr/bin/composer

Ubuntu 18.04 case... 这个是我的。

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

我也有一个共享的托管帐户1 & 1(电离子) ,这里是我必须做的:

如果您以根 ssh 帐户登录,您可以创建一个 ~/. bash _ profile 并添加

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

这样你现在就可以使用你通常使用的命令,它只是工作。(将 poser.phar 放入项目文件夹根目录中)

然后,确保您的 laravel poser.lock 文件从您的开发计算机到达您的项目文件夹1并运行

composer install

使用@tobymackenzie 的这个提示: 在共享主机上,你真的应该只运行作曲家安装(而不是更新!)从您在自己的机器上创建的 poser.lock 文件。这样内存使用率仍然很低。

我仍然有 STDIN 与工匠命令的问题,所以请确保您将.env 文件更改为

APP_ENV=local

因为将其设置为 production 会在等待您键入 yes时抛出无限的 STDIN 警告。至少在我看来是的。

希望这对谁有帮助。

试试这个方法

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

也许这不能完全解决你的问题,但它可能会帮助其他人谁来到这里从网络搜索。

只需运行命令将下面的代码添加到 composer.json文件中,就可以设置不同的 PHP 版本:

$ composer config platform.php 8.0.7
"config": {
"platform": {
"php": "8.0.7"
}
}

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没有任何特定的选项,它将使用您的 PHP 版本在 /usr/bin/env 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

知道这个问题有点老... ... 但是如果你把作曲家拉到你的应用程序根目录:

Https://getcomposer.org/download/

不要依赖全球作曲家,你可以运行:

Php56 comper.phar { your command }

或者我相信新的 Homstead 版本会像这样:

Php7.1 comper.phar { your command }

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

Ubuntu 18.04表格... 这对我有用。这里,编写器选择所需的 PHP 版本自动。

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

或者

 /opt/lampp/bin/php /usr/bin/composer update

如果您只是需要让编写器忽略版本要求,您可以绕过使用:

composer install --ignore-platform-reqs

我用的是 Hostgator 的共享账号,下面这些对我很有用:

  1. 首先,找出您所需要的 PHP 版本位于何处(您可以开始键入 ea-php并按 TAB以列出所有以 ea-php开头的可执行文件) :

    which ea-php73

    /usr/local/bin/ea-php73
    
  2. 然后,找出作曲家住在哪里:

    which composer

    /opt/cpanel/composer/bin/composer
    
  3. 然后使用这些命令运行您的作曲家命令:

    /usr/local/bin/ea-php73 /opt/cpanel/composer/bin/composer install

要设置不同的 php 版本,必须在 Composer.json 文件中添加两个位置:

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

在我的例子中,Composer 检测到 PHP 版本7.2.6,但是我实际的 PHP 版本是8.0.2。所以,我做了以下步骤,这是我的解决方案。

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

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

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

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

你总是可以用那种方式。

在项目文件夹中,其中有 poser.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/作曲器路径在哪里

你应该有 php7.4-cli

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

对于 linux/ubuntu 用户来说是这样的

干杯; -)

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

然而,我确实注意到,虽然运行 which phpphp -v返回正确的版本 which /usr/bin/env php返回编写器使用的 PHP 的问题版本。因此,在这里找到了一个非常好的答案,并概述如下:

问题:

/usr/bin/env php在当前的 $PATH中查找一个名为 php的可执行文件; 它不关心别名、 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

对于使用 普莱斯克的人来说,你需要不同的零件:

  1. /opt/plesk/php/<version/bin/php获得所需的 PHP 版本,例如 /opt/plesk/php/7.4/bin/php
  2. 通过查看脚本内容(cat /usr/local/bin/composer)得到编写器的真实路径,因为 /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

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

  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

现有的答案部分没有回答这个问题,给出了不起作用的建议,或者给出了糟糕的建议。

问题是:

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

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

    现在您可以测试 Composer 命令所使用的 PHP 版本 电话。

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

    在我的例子中,这两个都使用我的默认 php 脚本(版本) 因此,当7.2版本用于运行 Composer 时,脚本 由 Composer 调用时使用默认命令。

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

    "config": {
    "platform": {
    "php": "7.2.0"
    }
    }
    

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

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

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

有两种方法。

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

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

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

或者来自 命令行

composer config platform.php 5.5

我有办法解决这个问题。


export PATH=/usr/local/Cellar/php/8.0.12/bin:$PATH && composer -vvv


临时更改环境变量并使用编写器

随着 PHP 8和8.1的出现,我必须在 CLI 中定期处理几个版本,我发现这样做的最佳方法是创建一个别名。

假设您是使用 brew 安装的,或者已经知道您的 PHP 版本在哪里。

向 bash 配置文件添加以下内容。

alias php7='/usr/local/opt/php@7.4/bin/php'
alias php8='/usr/local/opt/php@8.0/bin/php'

如果需要,还可以安装 PHP 8.1和 brew install php@8.1,并添加另一个别名。

这将允许您运行 php8 composer,您可以通过创建一个 index.php文件并将 phpinfo()添加到它来进行快速测试。

php7 index.php | grep "PHP Version"
php8 index.php | grep "PHP Version"

我有同样的问题,这就是我如何能够在不破坏系统的情况下找出 如何在共享主机上使用不同的 PHP 版本运行作曲家:)

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

研究结果:

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

which php

或者

whereis php

不会给你最好的答案。


遵循以下简短指南:

首先找到到作曲家二进制文件的实际路径。 在我的共享主机服务器上

/opt/cpanel/composer/bin/composer

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

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

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

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

现在,请确保 php 的运行路径与下面的类似:

/opt/cpanel/ea-php80/root/usr/bin

如果您在文件夹中找到 php,那么您现在可以使用如下别名:

alias php='/opt/cpanel/ea-php80/root/usr/bin/php'

通过运行

php --version

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

enter image description here


现在,像平常一样运行作曲家。例如

 php /opt/cpanel/composer/bin/composer update
php /opt/cpanel/composer/bin/composer install
php /opt/cpanel/composer/bin/composer install

还记得我们是如何在/opt/cpanel/writer/bin/author 中找到作曲家二进制文件的吗。如果这与服务器上的编译器二进制文件的路径不匹配,请使用适当的路径。

希望这个能帮上忙。 编码愉快!

在试图使用 SSH 在我的 SiteGround 共享主机上安装 Laravel 应用程序时,我必须在执行编写器之前指定适当的 PHP bin 常量:

PHP_BIN=php81 composer install

这里的其他解决方案不会起作用。

在 AlmaLinux 和 php74上,我的默认 PHP 版本是 php81安装到 /usr/bin/php81并在 /usr/bin/composer位置创作,以下工作一次: 使用 php81运行创作器。

/usr/bin/php81 /usr/bin/composer install

作曲家标志可以添加如下:

/usr/bin/php81 /usr/bin/composer install --no-dev --no-interaction --ignore-platform-reqs

请注意,这些命令需要在您的工作文件夹中执行。