运行composer install时从shell_exec获取整个输出

时间:2016-10-04 18:26:58

标签: php laravel

我试图获得运行此命令的整个输出'composer install --no-interaction --no-dev --prefer-dist'应生成

当我在shell中运行此命令时,这是输出:

使用包信息加载作曲家存储库

  

从锁定文件安装依赖项

     

无需安装或更新

     

生成自动加载文件

     

照亮\基金会\ ComposerScripts ::安装后

     

php artisan optimize

     

生成优化的类加载器

当我从php代码运行相同的命令时:

  回声“作曲家:”。 shell_exec('cd ..; composer install --no-interaction --no-dev --prefer-dist');

我得到的只是: 生成优化的类加载器

这是否有原因?

1 个答案:

答案 0 :(得分:2)

shell_exec捕获写入stdout的输出。 Composer将大部分消息写入stderr,而不是stdout。 "生成优化的类加载器"来自Laravel的工匠命令,写入stdout,这就是你看到这条信息的原因。

如果您想获得stderr的所有输出,则需要将stdout重定向到shell_exec。将2>&1添加到命令的末尾,将stderr重定向到stdout

echo "composer: " . shell_exec('cd .. ; composer install --no-interaction --no-dev --prefer-dist 2>&1');