我已经被困在这几天了。我使用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上执行此操作。
答案 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)
有两种方法可以做到。
composer update --ignore-platform-reqs
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。
检查您的默认 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
在你的 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 使用默认命令调用。
现在让我们按照一些答案中的建议添加平台约束
"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 的人,您需要不同的部分:
/opt/plesk/php/<version/bin/php
获取所需的 PHP 版本,例如 /opt/plesk/php/7.4/bin/php
/usr/local/bin/composer
) 来获取 Composer 的真实路径,因为 cat /usr/local/bin/composer
是自定义的 Plesk 脚本。就我而言,它是 /usr/local/psa/var/modules/composer/composer.phar
# /opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar install
... 或者为了更简单,只需在 composer74
中创建一个新文件(我喜欢 /usr/local/bin
):
cat > /usr/local/bin/composer74
创建文件#!/bin/bash
/opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar
进入终端
CTRL+D
保存文件chmod +x /usr/local/bin/composer74
使其可执行# composer74 install
答案 14 :(得分:0)
我对上述任何答案都没有运气,我在 composer.json 中有自动脚本,所以忽略或伪造平台只会导致脚本失败等。在命令中设置 php 版本不起作用!
但是我确实注意到,虽然运行 which php
和 php -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。这就是我所做的。