【问题标题】:Running composer by shell_exec or passthru don't work通过 shell_exec 或 passthru 运行 composer 不起作用
【发布时间】:2020-08-13 23:09:25
【问题描述】:

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

网址示例: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

代码运行良好并执行 composer install。

一开始我以为可能是文件权限,所以我改成777,错误一直发生。

为什么 composer 命令在被 URL 调用时不起作用?有谁知道如何解决这个问题?

【问题讨论】:

  • PATH 和 HOME 对于 Apache 运行的 PHP 设置会有所不同。
  • 你知道如何在 Nginx Server 中找到 PATH e HOME 的值吗?
  • 可能是 /etc/default/nginx,也可能是 PHPs fpm pool config env[PATH]?
  • 我得到了 composer 文档,在我的例子中是 /home//.composer。

标签: php composer-php web-deployment shell-exec


【解决方案1】:

我解决了这个问题,就像马里奥在 cmets 中添加 COMPOSER_HOME 值一样悲伤。

所以我的代码是这样的:

$composer = shell_exec('
    export COMPOSER_HOME=/home/[user]/.composer;
    composer install 2>&1'
);
echo "$composer";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2012-12-25
    • 2016-07-01
    • 2014-05-15
    • 1970-01-01
    • 2022-11-02
    • 2014-11-25
    相关资源
    最近更新 更多