我用PHP编写了一些代码备份数据库。
这是我的代码:
exec("mysqldump --opt -h localhost -u root test > mydb.sql");
但是我的文件中有0字节(mydb.sql)。我也运行passthru(),system(),但它仍然是0字节。
我尝试使用命令。它有效。
我将最新的XAMPP用于我的localhost。
那么,我怎样才能让它正常工作?
答案 0 :(得分:9)
可能是权限问题,或者您没有传递密码。要查看错误,请使用2>&1
exec("mysqldump --opt -h localhost -u root test > mydb.sql 2>&1", $output);
print_r($output);
这将显示您通常在命令行中看到的错误。
答案 1 :(得分:2)
很可能mysqldump不在PHP / Apache的路径中。这将导致shell在STDERR上吐出“未找到命令”错误,并且STDOUT上没有输出(您重定向到文件并以0长度结束)。
尝试添加mysqldump(c:\mysql\bin\mysqldump
或其他)的完整路径,然后重试。
答案 2 :(得分:1)
你必须在-p选项后没有空格地传递密码,并且在-u
后直接输入用户名的密码exec(“mysqldump --opt -h localhost -uUSER -pPASSWORD DBNAME> mydb.sql”);
我在共享主机上存在问题,原来我必须使用主机用户名和密码而不是数据库用户名和密码
答案 3 :(得分:0)
试试这个!
$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);
答案 4 :(得分:0)
exec()和system()等命令不适用于所有服务器,只有本地服务器和专用服务器,如果您托管服务器,则必须查看您的主机方案是否允许访问exec(命令)和system(如果你不允许雇用另一个计划。