我正试图通过PHP脚本使用这一个简单的行来支持数据库:
passthru("/usr/bin/mysqldump --opt --host=localhost --user=\"myuser\" --password=\"mypass\" db_name > /var/www/vhosts/mydomain.com/httpdocs/tools/dbbackup-2011-12-17.sql");
我没有任何错误或警告或任何东西。但是,如果我复制该字符串并通过SSH完全按照服务器上的方式执行它,那就完美了。
/usr/bin/mysqldump --opt --host=localhost --user="myuser" --password="mypass" db_name > /var/www/vhosts/mydomain.com/httpdocs/tools/dbbackup-2011-12-17.sql
我尝试使用exec()和system()代替passthru()但结果相同。这真的很奇怪,我无法解决可能出现的问题。有什么想法吗?
答案 0 :(得分:2)
如果我能做出有根据的猜测,那是因为运行php脚本的用户(即运行httpd的用户)没有写入/var/www/vhosts/mydomain.com/httpdocs/tools/
的权限。
虽然您用来执行命令的用户有。
STDERR
和STDOUT
要查看与STDERR
打印的问题是否与问题相关,请使用以下代码段!
$tubes = array(
0 => array("pipe", "r"),
// print contents on STDOUT to file
1 => array("file", "/var/www/vhosts/mydomain.com/httpdocs/tools/dbbackup-2011-12-17.sql", "w"),
2 => array("pipe", "w")
);
$p_handle = proc_open (
"/usr/bin/mysqldump --opt --host=localhost --user=\"myuser\" --password=\"mypass\" db_name",
$tubes, $pipes
);
if (is_resource ($p_handle)) {
fclose ($pipes[0]);
$stderr_data = stream_get_contents ($pipes[2]); fclose($pipes[2]);
$proc_ret = proc_close ($p_handle);
echo "--------- STDERR:\n$stderr_data\n";
echo "------------ RET: $proc_ret\n";
} else {
die ("Unable to execute external resource, aborting!");
}
您是否检查过与error_log
相关联的httpd
?