Php mysqldump不';我跑不好

Php mysqldump不';我跑不好,php,backup,xampp,mysqldump,Php,Backup,Xampp,Mysqldump,我用PHP写了一些代码来备份数据库 这是我的代码: exec("mysqldump --opt -h localhost -u root test > mydb.sql"); 但是我的文件(mydb.sql)中有0字节。我也使用passthru()、system()运行,但它仍然得到0字节 我尝试使用命令。它起作用了 我对本地主机使用最新的XAMPP 那么,如何才能使其正常工作呢?这可能是权限问题,或者您没有传递密码。要查看错误,请使用2>&1 exec("mysqldump --opt

我用PHP写了一些代码来备份数据库

这是我的代码:

exec("mysqldump --opt -h localhost -u root test > mydb.sql");
但是我的文件(mydb.sql)中有0字节。我也使用passthru()、system()运行,但它仍然得到0字节

我尝试使用命令。它起作用了

我对本地主机使用最新的XAMPP


那么,如何才能使其正常工作呢?

这可能是权限问题,或者您没有传递密码。要查看错误,请使用
2>&1

exec("mysqldump --opt -h localhost -u root test > mydb.sql 2>&1", $output);
print_r($output);

这将向您显示通常在命令行上看到的错误

很可能mysqldump不在PHP/Apache的路径中。这将导致shell在STDERR上抛出一个“command not found”错误,在STDOUT上没有输出(您将其重定向到一个文件并以0长度结束)


尝试将完整路径添加到mysqldump(
c:\mysql\bin\mysqldump
或其他内容),然后重试

您必须在-p选项后面传递密码,并且在-u后面直接传递用户名

exec(“mysqldump--opt-h localhost-uUSER-pPASSWORD DBNAME>mydb.sql”)

我在共享主机上遇到另一个问题,原来我必须使用主机用户名和密码,而不是数据库用户名和密码

试试这个

$username = "root";
$password = "";
$hostname = "localhost";
$dbname   = "test";

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" .date("Y-m-d_H-i-s").".sql"));

$command = "C:\AppServ\MySQL\bin\mysqldump --add-drop-table --host=$hostname --   user=$username --password=$password ".$dbname;

system($command);

exec()和system()等命令不适用于所有服务器,仅适用于本地服务器和专用服务器,如果您托管服务器,则必须查看您的托管计划是否允许访问exec(命令)和system(),如果您不允许租用其他计划。

我的问题与OP类似,但在我的情况下,没有输出文件(甚至不是空的)。我的本地服务器上的脚本立即完成,所以看起来也不是超时问题。
print\r($output);
给出一个空数组-
array()
。我的命令是
$command=“/opt/lampp/bin/mysqldump-u”。$\u POST['db\u user']。$\u POST['db\u name']。“>/root/Desktop/download.sql 2>&1”
并且相同的命令在命令行(1.7 MB文件)中生成正确的结果。PHP未在安全模式下运行,
exec()
没有被禁用,我也不知道。有什么想法吗?谢谢,我已经解决了。这是权限问题。输出位置必须在
/opt/lampp/htdocs
中。但是应该有一些错误显示。为什么你回答了两次?因为我无法发送,然后发送了两次,仍然无法删除!t的哪一部分his应该是在解决问题吗?上面的代码只是解决问题的另一种方法,是解决问题并租用专用服务器的唯一解决方案,因为不是每个托管计划都允许使用“system”和“exec”之类的功能。这不太可能是解释。正在创建输出文件的事实(尽管是空的)表示
exec
正在运行该命令。