用PHP执行linux命令
我试图通过一个PHP命令行脚本执行一个linux命令,使用exec命令没有问题。用PHP执行linux命令
问题是,我正在执行的命令(mysqldump)在出现错误时输出错误消息(例如用户名/密码不正确)。我似乎无法捕捉到这个错误以记录它。它只是将这个错误打印到屏幕上。
如何导致此错误不会被打印到屏幕上,而是将其放入一个变量以便在脚本中使用?
谢谢!
尝试使用反引号?
$var = `command`;
我不是太热的Unix(新年分辨率...),但这些功能看起来有所帮助:
-
shell_exec
- 返回结果为字符串。 -
passthru
- 它看起来像你可以执行这样的:passthru('command', $result);
,然后使用$result
。
exec("mysqldump -u user -p passwod database > outputfile.sql 2> error.log");
您需要redirect stderr to stdout,所以你可以捕捉它。本实施例中的路由标准输出到devnull(因此ignoreing它)和路线错误输出到你:
exec('ls * 2>&1 1>/dev/null');
不要忘记清理任何用户输入! escapeshellarg,escapeshellcmd等 – 2009-02-02 15:47:28
下面将路由标准错误消息发送到同一个地方正常输出。
exec("mysql_dump blah 2>&1",$output,$return_val)
if($return_val !== 0)
echo "there was an error"
2> & 1装置重新路由标准错误消息发送到同一个地方标准输出,从而将被加载到输出数组。
使用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);
?>
@edanb:这是一个足够好的解决方案。但是我不是bash的粉丝,所以如果你愿意花更多的时间来处理错误,我建议你使用proc_open。 – artificialidiot 2009-02-02 19:25:35
这是一个别名EXEC – troelskn 2009-02-02 19:30:51