PHP通过ajax导出/下载mysql备份

时间:2018-06-07 19:16:33

标签: php ajax

以下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变量中的数据作为下载发送到客户端?

1 个答案:

答案 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

Using a .php file to generate a MySQL dump

How to fix "Headers already sent" error in PHP