gpt4 book ai didi

php - 从 PHP 脚本运行 mysqldump 不起作用,但可以在 SSH 上运行

转载 作者:行者123 更新时间:2023-11-29 02:33:46 26 4
gpt4 key购买 nike

我正在尝试使用这一行简单的代码通过 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() 但结果相同。这真的很奇怪,我无法确定可能是什么问题。有什么想法吗?

最佳答案

有根据的猜测

如果我能做出有根据的猜测,那是因为运行 php 脚本的用户(即运行 httpd 的用户)没有写入 /var/www/vhosts/mydomain 的权限。 com/httpdocs/tools/.

尽管您用来执行命令的用户有。


STDERRSTDOUT

要查看是否有任何打印到 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!");
}

检查日志文件!

您是否检查过与您的 httpd 关联的 error_log

关于php - 从 PHP 脚本运行 mysqldump 不起作用,但可以在 SSH 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com