我正试图在Laravel中构建一个简单的诊断端点,以了解被查询机器上安装了哪些版本的软件。从这个意义上说,我有这些代码行和相应的输出:
dump(shell_exec('pdftotext -v')); // null
exec('pdftotext -v', $output, $code);
dump($output, $code); // [], 0
但如果我只是在终端中写同样的东西,效果很好:
> pdftohtml -v
pdftohtml version 21.12.0
甚至:
> php -r 'shell_exec("pdftotext -v");'
pdftohtml version 21.12.0
那么,为什么会有这种差异,为什么我不能从PHP运行同样的东西呢?
OSX本地和生产Vapor环境中的行为相同。
取自php_manual站点
如果您正试图运行诸如";gunzip-t";在shell_exec中,如果得到一个空结果,则可能需要添加2>amp;1到命令结束,例如:
不总是有效:
echo shell_exec("gunzip -c -t $path_to_backup_file");
应该工作:
echo shell_exec("gunzip -c -t $path_to_backup_file 2>&1");