Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP通过ajax导出/下载MySQL备份_Php_Ajax - Fatal编程技术网

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

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

下面的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)文件之前,上述操作无法正常工作:

但是,在将代码移动到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}" );