我试图获得运行此命令的整个输出'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');
我得到的只是: 生成优化的类加载器
这是否有原因?
答案 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');