Php system()/exec() 不返回输出

标签 php command-line exec

对于像“ls”这样的常见命令,exec() 可以正常工作,例如:

exec('ls',$output,$retval);
var_dump($output,$retval);
// $output contains an array of filenames, and retval === 0

但是当试图执行另一个程序时,我无法得到输出:

exec('some_command --a_parameter',$output,$retval);
var_dump($output,$retval);
// $output contains an empty array, end $retval === 0

不过,当直接从命令行执行此命令时,它会打印一些行。 由于结果(更新了一些文件、添加了数据等),我知道该命令已成功执行,但我看不到输出。

有什么想法吗?

最佳答案

听起来程序正在将其警告输出到标准错误而不是标准输出。 exec 只会捕获标准输出。我不确定标准错误是否总是发送到 Apache 错误日志,但似乎有可能。

如果您不需要与非 *nix 系统兼容,您可以通过在命令中附加 2>&1 将标准错误重定向到标准输出:

exec('some_command --option 2>&1', $output, $ret);

这应该使警告对您的 php 程序可用并防止不必要的日志记录。

关于Php system()/exec() 不返回输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602627/

相关文章:

python - 使用pymssql,如何调用带有输出的存储过程

java - 打开 PDF 只能在 netbeans 中使用

php - 在结账/一页末尾添加自定义复选框

php - 使用 class_implements VS instanceof 的用处

numpy - pip3搜索找到intel-numpy,但无法安装

linux - 在 Bash 脚本中将文件内容作为密码参数传递

php - 防止重复+相同电商订单的页面设计

php - Codeigniter 提交用纯 HTML 编写的表单

regex - 使用sed将字符串逐行替换为正则表达式

python - 加速从 Golang 的 exec packaqe 访问 python 程序