PHP通过ajax导出/下载MySQL备份
下面的PHP(MySQL备份/下载)脚本转储一个.sql备份文件,该文件被gzip压缩并自动下载到客户端 在一个单独的.php文件中运行此脚本会立即将一个文件下载到客户端(该文件是一个有效的压缩.sql导出/备份文件)。到目前为止一切都很好PHP通过ajax导出/下载MySQL备份,php,ajax,Php,Ajax,下面的PHP(MySQL备份/下载)脚本转储一个.sql备份文件,该文件被gzip压缩并自动下载到客户端 在一个单独的.php文件中运行此脚本会立即将一个文件下载到客户端(该文件是一个有效的压缩.sql导出/备份文件)。到目前为止一切都很好 $database = 'mydbname'; $user = 'myusername'; $pass = 'mypass'; $host = 'localhost'; $filename = "backup-" . date("d-m-Y") . ".sq
$database = 'mydbname';
$user = 'myusername';
$pass = 'mypass';
$host = 'localhost';
$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";
header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
passthru("mysqldump --user={$user} --password={$pass} --host={$host} {$database} | gzip --best");
请注意,在我将这一行添加到我的.user.ini(共享主机帐户上的本地php.ini)文件之前,上述操作无法正常工作:
但是,在将代码移动到ajax.php文件中,并通过jQuery$.ajax()从JavaScript单击事件调用它之后,它将二进制数据发送到ajax回调中,而不是直接发送到客户端
$.ajax({
url: "ajax.php",
type: "post",
data: "request=do_db_backup_now",
success: function(recd){
alert(recd);
$('#btnMysqlBkup').hide();
}
});
此时,我需要做什么才能将
recd
变量中的数据作为下载发送到客户端?为了实现这一点,我必须用以下内容替换$.ajax()
jQuery结构:
$(document).on('click', '#btnMysqlBkup', function(){
var now = new Date();
var dtcode = now.toISOString().replace(/[-:]|T/g,"").slice(2,14);
var oReq = new XMLHttpRequest();
oReq.open("POST", "ajax_mysql_bkup.php", true);
oReq.responseType = "blob";
oReq.onload = function(oEvent) {
var blob = oReq.response;
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="MySQL_bkup_"+dtcode+".zip";
link.click();
};
oReq.send();
});
然后,PHP代码开始工作,结果自动下载到本地文件系统,作为一个功能性zip文件
$database = 'mydbname';
$user = 'myusername';
$pass = 'mypass';
$host = 'localhost';
$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";
header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
passthru("mysqldump --user={$user} --password={$pass} --host={$host} {$database} | gzip --best");
备选PHP-(还将gzip备份存储在服务器上以及下载到客户端):
资料来源:
可能重复的谢谢!我只需要JS部分。有没有办法获取后端发送的二进制文件的文件名?与直接链接的文件名来通过。对不起,我很想帮助,但它太长了,我不再与PHP工作了。恐怕一点线索也没有。我建议您提出一个新的StackOverflow问题,参考此问题,并询问社区如何获取该文件名。很可能你会在一小时内得到答案。梅勒尔斯·沃克斯!
$database = 'mydbname';
$user = 'myusername';
$pass = 'mypass';
$host = 'localhost';
$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";
header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
passthru("mysqldump --user={$user} --password={$pass} --host={$host} {$database} | gzip --best");
$database = 'mydbname';
$user = 'myusername';
$pass = 'mypass';
$host = 'localhost';
$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$fqfn = "/home/myacctname/_sql_BKUPs/" . $filename;
$mime = "application/x-gzip";
exec("mysqldump --user={$DBUSER} --password={$DBPASSWD} --host={$HOST} {$DATABASE} | gzip -9 > {$fqfn}");
header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
passthru( "cat {$fqfn}" );