我已经被困在这几天了。我正在使用 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。
Ubuntu 18.04 案例……这适合我。
/usr/bin/php7.1 /usr/local/bin/composer update
也许这不能完全解决您的问题,但可能会帮助从网络搜索来到这里的其他人。
只需运行命令将以下代码添加到您的 composer.json
文件中即可设置不同的 PHP 版本:
$ composer config platform.php 8.0.7
"config": {
"platform": {
"php": "8.0.7"
}
}
在 xubuntu 上,我默认使用 php 7.2。但需要用 php 5.6 运行 composer。
所以这对我有用:
php5.6 /usr/bin/composer
如果您只需要让作曲家忽略版本要求,您可以绕过使用:
composer install --ignore-platform-reqs
你总是可以使用这种方式。
在您拥有 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 系统文件夹的路径与作曲家
!!!你应该有 php7.4-cli
sudo apt-get install -y php7.4-cli
linux/ubuntu 用户的这种方式
干杯;-)
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
composer
头部的 Shebang,但可以破坏原来的 composer.phar
文件。
就我而言,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
我在 1&1 (ionos) 上也有一个共享主机帐户,这就是我必须做的:
如果您以 root 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 警告。至少在我看来是这样。
希望这可以帮助某人。
试试这个方法
ea-php72 /opt/cpanel/composer/bin/composer
现有答案部分没有回答问题,给出不起作用的建议或给出不好的建议。
该问题指出:
但是,我可以运行 php5.5 composer.phar install,再走一点,但它仍然失败,因为在某个地方,再次调用 PHP,但它失败了,因为它使用的是 4.4.6。
相反,我在这里展示了一种测试和验证建议的方法。
我希望我自己有一个更好的答案,但我不确定什么是最好的解决方案。就个人而言,我会选择一个解决方案,确保在主机上使用正确版本调用 PHP(例如,通过别名或正确设置 PHP 环境,在容器内运行整个操作或其他解决方案),无论 Composer 和添加平台 php 约束。
如果您不运行任何脚本并且只需要正确解决依赖关系的要求,config:platform:php 可能是您的朋友。
假设我们的默认 php 版本是 7.4,但我们的项目需要 7.2。
检查您的默认 PHP 版本命令行: # 显示默认 PHP 的版本 php --version # 显示默认 PHP 的路径 which php # 显示 /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.0" } } 不会更改脚本执行的任何内容:/usr/bin/php7。 2 /usr/bin/composer php-version # 结果仍然是 7.4 实际上,平台选项重要的是解决需求,所以你应该添加它(在你的项目 composer.json 中)。它只是无法解决使用正确版本的 PHP 的作曲家的上述问题。另请参阅平台的 Composer 文档。
您可以更改您的 PATH
以覆盖 php 版本。
PATH="/home/user/bin:$PATH"
在 /home/user/bin
(或任何其他目录)中创建一个名为 php 的符号链接到 php5 二进制文件。
另一种选择,使用 shell 别名:
alias php="/path/to/php5"
知道这个问题有点老了......但如果你将作曲家拉到你的应用程序根目录:
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
我在 Hostgator 共享帐户上,以下对我有用:
首先,找出你想要的 PHP 版本(你可以开始输入 ea-php 并点击 TAB 列出所有以 ea-php 开头的可用可执行文件): which ea-php73 /usr/local/bin/ea-php73 然后,找出作曲家住在哪里:哪个作曲家 /opt/cpanel/composer/bin/composer 然后使用这些来运行你的作曲家命令: /usr/local/bin/ea-php73 /opt/cpanel/composer/bin/composer install
Ubuntu 18.04
案例...这对我有用。在这里,Composer 会自动选择所需的 PHP 版本。
/opt/lampp/bin/php /usr/bin/composer install
或者
/opt/lampp/bin/php /usr/bin/composer update
对于使用 Plesk 的人,您需要不同的部分:
从 /opt/plesk/php/
...或者为了更简单,只需在
cat > /usr/local/bin/composer74 创建文件粘贴以下内容:
进入终端
按 CTRL+D 保存文件 chmod +x /usr/local/bin/composer74 使其可执行 在任何地方使用它:
# /opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar install
/usr/local/bin
中创建一个新文件(我喜欢 composer74
):
#!/bin/bash
/opt/plesk/php/7.4/bin/php /usr/local/psa/var/modules/composer/composer.phar
# composer74 install
有两种方法可以做到这一点。
告诉作曲家在终端中运行命令时忽略平台要求。
composer update --ignore-platform-reqs
告诉作曲家忽略项目根目录下 composer.json 文件中的平台要求。
"config": {
"platform-check": false,
},
我们可以告诉 Composer,我们的应用程序支持哪个版本的 PHP,方法是使用 composer.json 文件中的平台配置,添加以下配置,
{
"config": {
"platform": {
"php": "5.5"
}
},
"require": {
...
}
}
或者从命令行
composer config platform.php 5.5
我遇到了同样的问题,这就是我如何能够弄清楚如何在共享主机上使用不同的 PHP 版本运行 composer 而不会破坏系统:)
幸运的是,使用不同 PHP 版本的 composer 解决这个问题非常简单。
发现:
默认 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 版本,如下面的屏幕截图所示:
https://i.stack.imgur.com/xY8Oe.png
现在,正常运行作曲家。例如
php /opt/cpanel/composer/bin/composer update
php /opt/cpanel/composer/bin/composer install
php /opt/cpanel/composer/bin/composer install
记住我们是如何在 /opt/cpanel/composer/bin/composer 找到 composer 二进制文件的。如果这与服务器上编译器二进制文件的路径不匹配,请使用适当的路径。
我希望这有帮助。快乐编码!
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
不会失败,但也不会完成执行。您仍然可以手动运行安装后的脚本。
我已按照本指南将 Laravel webapps 部署到 1and1 而不提交 vendor
目录:Deploy Laravel Webapp to 1and1
post-root
package-install` 字段。我应该加一个吗?
cp .env.example .env
也可以达到同样的效果,它只是将 .env.example
的内容复制到一个名为 .env
的新文件中
必须在您的 composer.json 文件中添加两个位置以设置不同的 php 版本:
"config": {
"platform": {
"php": "7.4"
}
}
"require": {
"php": "^7.4",
}
我对上述任何答案都没有运气,我在 composer.json 中有自动脚本,所以只是忽略或伪造平台只会导致脚本失败等。在命令中设置 php 版本不起作用!
然而,我确实注意到,虽然运行 which php
和 php -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
platform
设置不会更改任何本地 PHP 路径。相反,Composer 将使用此值来获取依赖项 仅匹配此版本。不再,它们仍然使用当前的 PHP 版本运行。只有更改 $PATH
变量才会更改用于运行下标的 PHP 版本。
$PATH
环境变量更改 PHP 版本。一个例子是 github.com/webit-de/php-version-pickup。它从 .php-version
文件中获取版本并继续在当前 shell 会话中使用它,也适用于所有子进程,例如由 Composer 启动的子进程。
我有办法解决这个问题。
export PATH=/usr/local/Cellar/php/8.0.12/bin:$PATH && composer -vvv
临时更改环境变量并使用composer
随着 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'
如果您愿意,也可以使用 brew install php@8.1
安装 PHP 8.1 并添加另一个别名。
这将允许您运行 php8 composer
,您可以通过创建 index.php
文件并将 phpinfo()
添加到其中来进行快速测试。
php7 index.php | grep "PHP Version"
php8 index.php | grep "PHP Version"
您可以尝试将 php 和 php-config 文件复制到 /usr/local/bin 中。该路径具有更高的优先级,应该覆盖 /usr/bin 文件夹,而无需禁用 SIP。这就是我所做的。
/usr/local/bin
中编辑任何内容
不定期副业成功案例分享
sudo update-alternatives --set php /usr/bin/php7.4
为php
使用特定版本