通过shell执行命令后不返回输出

时间:2014-07-29 07:36:30

标签: php linux shell fedora

Fedora 20 中执行php脚本后:

echo shell_exec('which systemctl');

显示空字符串。

如果要在命令行中执行' which systemctl ',则会显示以下内容:

/usr/bin/which: no systemctl in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

如何通过php接收此输出?

2 个答案:

答案 0 :(得分:3)

由于systemctl不在您的路径上(或者不在您的系统上),which systemctl会返回错误消息

/usr/bin/which: no systemctl in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

使用shell_exec('which systemctl');在PHP中运行时,不会收集标准错误,标准输出为空。因此PHP看到一个空字符串。

使用此命令可以获得标准错误:

shell_exec('which systemctl 2>&1');

答案 1 :(得分:0)

我在我的项目中使用passthru,如下面的代码:

$output = '';
ob_start();
passthru('which systemctl', $output);
$output = ob_get_contents();
ob_end_clean();

并且shell_exec也会返回输出,请参阅此处的文档:http://php.net/manual/en/function.shell-exec.php

但是,任何一个passthru和shell_exec都在工作。