以下PHP(MySQL备份/下载)脚本转储.sql备份文件,该文件被gzip压缩并自动下载到客户端。
在单独的.php文件中运行此脚本会立即导致文件下载到客户端(该文件是有效的压缩.sql导出/备份文件)。到目前为止一切都很好。
$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)文件之前,上述操作不起作用:
output_buffering = "ON"
然而,在将代码移动到ajax.php文件中并通过jQuery $ .ajax()从javascript click事件调用它之后,它将二进制数据发送到ajax回调而不是直接发送到客户端。
$.ajax({
url: "ajax.php",
type: "post",
data: "request=do_db_backup_now",
success: function(recd){
alert(recd);
$('#btnMysqlBkup').hide();
}
});
此时我需要做什么才能将recd
变量中的数据作为下载发送到客户端?
答案 0 :(得分:1)
为了使这项工作,我不得不用这个替换self.tabbar.tintAdjustmentMode=UIViewTintAdjustmentModeNormal;
jQuery构造:
$.ajax()
然后,PHP代码工作,结果自动下载到本地文件系统作为功能zip文件。
$(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();
});
ALTERNATIVE PHP - (还在服务器上存储gzipped备份以及下载到客户端):
$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");
Download a file by jQuery.Ajax< ===请回复此答案
Using jquery ajax to download a binary file
How to format a JavaScript date