用PHP执行linux命令

时间:2009-02-02 15:38:47

标签: php shell scripting

我正在尝试通过PHP命令行脚本执行linux命令,使用exec命令没问题。

问题是,我正在执行的命令(mysqldump)在出现错误时输出错误消息(例如用户/密码不正确)。我似乎无法捕获此错误以便记录它。它只是将此错误打印到屏幕上。

如何将此错误不打印到屏幕上,而是将其放入变量中以便在我的脚本中使用?

谢谢!

7 个答案:

答案 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相同的位置,因此将被加载到输出数组中。