我正在尝试通过PHP命令行脚本执行linux命令,使用exec命令没问题。
问题是,我正在执行的命令(mysqldump)在出现错误时输出错误消息(例如用户/密码不正确)。我似乎无法捕获此错误以便记录它。它只是将此错误打印到屏幕上。
如何将此错误不打印到屏幕上,而是将其放入变量中以便在我的脚本中使用?
谢谢!
答案 0 :(得分:4)
使用popen运行该过程。此页面上的示例#2显示了您正在寻找的内容:
<?php
error_reporting(E_ALL);
/* Add redirection so we can get stderr. */
$handle = popen('/path/to/spooge 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>
答案 1 :(得分:2)
exec("mysqldump -u user -p passwod database > outputfile.sql 2> error.log");
答案 2 :(得分:2)
您需要redirect stderr to stdout,以便捕获它。此示例将stdout路由到devnull(从而忽略它)并将stderr路由到您:
exec('ls * 2>&1 1>/dev/null');
答案 3 :(得分:1)
我在Unix(新年决议......)中并不热,但这些功能看起来很有用:
shell_exec
- 以字符串形式返回结果。passthru
- 看起来您可以像passthru('command', $result);
那样执行此操作,然后使用$result
。答案 4 :(得分:0)
你看过system()命令了吗?自从我做了任何PHP以来已经有一段时间了,但是响了一声。
答案 5 :(得分:0)
尝试使用反引号?
$var = `command`;
答案 6 :(得分:0)
以下内容将stderr消息路由到与正常输出相同的位置。
exec("mysql_dump blah 2>&1",$output,$return_val)
if($return_val !== 0)
echo "there was an error"
2&gt;&amp; 1表示将stderr消息重新路由到与stdout相同的位置,因此将被加载到输出数组中。