问题描述
我正在尝试从URL运行PHP代码,因此当打开URL时,脚本必须在服务器(Nginx)上运行。
URL示例:https://my-server.com/deploy.php
此脚本中有3个代码块:
- git pull(效果很好);
- rm -rf供应商(可以正常工作);
- composer安装(无效);
尝试调试时,我将这部分代码更改为:
$composer = shell_exec('composer install 2>&1');
echo "$composer";
注意:在使用 shell_exec 之前,我尝试使用 passthru ,但这也不起作用。
所以我得到了这个错误:
sh: 1: composer: not found
又一次出现此错误:
[RuntimeException]
The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly
如果通过SSH命令运行相同的文件,例如:
PHP deploy.PHP
代码运行正常,并执行作曲家安装。
起初我以为可能是文件许可权,所以我更改为777,并且错误不断发生。
为什么URL调用composer命令不起作用?有人知道如何解决这个问题吗?
解决方法
我解决了这个问题,就像Mario在添加COMPOSER_HOME值的评论中伤心一样。
所以我的代码是这样的:
$composer = shell_exec('
export COMPOSER_HOME=/home/[user]/.composer;
composer install 2>&1'
);
echo "$composer";