通过shell_exec或passthru运行作曲家不起作用

问题描述

我正在尝试从URL运行PHP代码,因此当打开URL时,脚本必须在服务器(Nginx)上运行。

URL示例:https://my-server.com/deploy.php

此脚本中有3个代码块:

  1. git pull(效果很好);
  2. rm -rf供应商(可以正常工作);
  3. 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";