PHP exec()没有在输出中返回错误消息

标签 php xml svn exec

我正在尝试以 XML 格式获取 svn 命令的某些输出。当我输入有效参数时输出正常。但是,当我输入错误的密码时,输出不会显示错误消息。 这是PHP代码:

exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/', $output);

这是我在终端中得到的输出:

<?xml version="1.0"?>
<log>
svn: OPTIONS of 'http://a51.unfuddle.com/svn/a51_activecollab': authorization failed: Could not authenticate to server: rejected Basic challenge (http://a51.unfuddle.com)

这是我使用 var_dump 从 $output 变量得到的输出:

array(2) {
[0]=>
string(21) "<?xml version="1.0"?>"
[1]=>
string(5) "<log>"
}

如您所见,$output 变量不返回第三行输出,而终端则返回。请帮助我获得与终端相同的输出(我什至尝试使用 shell_exec() 或 system() 方法,但它们返回与 exec() 相同的输出)如何获得完整输出? 提前谢谢!

最佳答案

您还需要捕获 stderr

stderr 重定向到 stdout 应该可以解决问题。将 2>&1 附加到命令的末尾。

例如

exec("/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/ 2>&1", $output);

如果它是一个复杂命令(例如带有管道的命令,比如执行 mysqldump 并将其传递给 gzip,然后重定向到文件 mysqldump ... | gzip > db.sql .gz) 创建一个子shell来捕获整个标准错误并将其重定向到标准输出:

exec('( error_command | cat >/dev/null ) 2>&1', $output)
#     ^                                ^   ^
#     `-- sub-shell with the command --´   `-- stderr to $output

关于PHP exec()没有在输出中返回错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863699/

相关文章:

php - Mysql:在一个查询中选择计数和 IN 子句

php - 当我搜索数据库而不是获取结果时,出现错误 500

MySQL:从格式异常的 XML 文件中提取数据

java - publicId 和 systemId 之间需要空格

java - 域模型的版本控制

php - 从 MySQL 数据库中提取日期删除时间

php - 如何使用单个查询从两个表中选择数据

javascript - 在JQuery中使用CORS获取RSS文件

svn - 在TortoiseSVN中创建分支时, "head", "working copy"和 "specific"修订版是什么意思?

java - 自动生成SVN标签