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)
Jon*_*ins 21
如果您只需要让 composer 忽略版本要求,您可以使用以下方法绕过:
composer install --ignore-platform-reqs
Run Code Online (Sandbox Code Playgroud)
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。
检查您的默认 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)
在您的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
现在让我们按照一些答案中的建议添加平台设置
"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 文档。
@php
而不是php
,则 Composer 使用PHP_BINARY
2路径,这是php
Composer 尝试推断正在执行的二进制路径。请参阅执行 PHP 脚本。在此示例中,通常与此处$(command -v php7.4)
不同。$(command -v php7.2)
$(command -v php)
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
。至少在我看来确实如此。
希望这可以帮助某人。
只需将以下代码添加到您的composer.json文件即可设置不同的php版本。
"config": {
"platform": {
"php": "7.1.3"
}
}
Run Code Online (Sandbox Code Playgroud)
就我而言,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)
您可以更改您的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)