如何使passthru()通过AJAX工作

时间:2015-04-16 03:51:15

标签: php jquery ajax

通过PHP命令I found this code

备份MySQL数据库
<?php

$DBUSER="user";
$DBPASSWD="password";
$DATABASE="user_db";

$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";

header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );

$cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best";   

passthru( $cmd );

exit(0);
?>

当保存到.PHP文件并加载页面时,代码效果很好。它会自动将.sql.gz file下载到浏览器的下载文件夹,无需用户干预。但是,我只需要在用户按下按钮时执行 - 因此,通过AJAX。

但是,当我通过AJAX调用代码时,没有任何反应。如果我警告AJAX命令的输出,我会得到二进制文件内容。

那么,如何将AJAX输出保存到浏览器的下载文件夹中?

这是我调用backup.php文件的jQuery代码:

$('#btnBackupNow').click(function(){
    $.ajax({
        type: 'post',
         url: 'ajax/dobackup.php',
        success: function(d){
                //alert(d); //<=== displays binary data (gzipped)
                //$('#btnBackupNow').fadeOut();
        }
    });
});

PS - 如果您喜欢备用验证码,请访问原始问题并提前注册the answer I got it from


SOLUTION:

根本不要使用AJAX。

将上述代码保存(使用正确的密码等),放在单独的PHP文件中,例如do_db_backup.php

页面上有一个隐藏的iFrame:

<iframe id="iBkup" style="display:none;"></iframe>

点击按钮后,将iFrame的src=属性设置为包含备用代码的PHP文件:

$('#btnBackupNow').click(function(){
    $('#iBkup').attr('src','do_db_backup.php');
});

点击按钮观看神奇的事情。

0 个答案:

没有答案