来自Ajax的php脚本在浏览器关闭后停止加载

时间:2014-09-04 12:12:59

标签: php jquery ajax

一个网站我正在努力根据客户输入构建一个pdf,我已经决定一旦购买完成,那就是当pdf开始生成时。原因是pdf可能达到50 / 60MB,我不希望客户端等待这个完成。

我正在使用Opencart,在结帐成功页面上,我有一个加载PHP脚本的Ajax命令。

我的印象是用户可以在脚本启动后关闭页面,但出于某种原因,我发现如果我希望文件出现在我的服务器上,我必须等待5/10秒才能关闭。

作为测试的一部分,它有点难以调试,需要立即关闭浏览器。

这是我的Ajax ......

$(document).ready(function() {  

    $.ajax({
        url: 'index.php?route=pdfengine/pdfengine/generate_final_pdf',
        type: 'post',
        dataType: 'json',
        data: {     
        },
        beforeSend: function() {},
        complete: function() {},
        success: function(json) {}
        });
    });

和我的php(目前我正在加载巨大的图像来代表加载时间)

 public function generate_final_pdf() {

    include('convert-to-pdf/mpdf.php');

    $mpdf=new mPDF();


    $stylesheet = file_get_contents(DIR_APPLICATION.'view/theme/rascal/stylesheet/stylesheet.css');
    $mpdf->WriteHTML($stylesheet,1);
    $mpdf->WriteHTML('<html><body><div class="pdf-test-style"><img src="http://example.com/top_quality_image.jpg" />test</div><pagebreak><img src="http://example.com/top_quality_image2.jpg" />test<pagebreak><img src="http://example.com/top_quality_image3.jpg" />test</body></html>',2);           

    $mpdf->Output(DIR_FINAL_PDFS.'order_idpdfid-'.$this->session->data['pdf_id'].'.pdf','F');


 }

编辑:

只是添加了自从阅读这些文章并查看回复以来我尝试过的更多信息,

所以在ajax设置的文件中..

ini_set('ignore_user_abort',true);

并且在ajax调用Ive设置的函数中......

ini_set('ignore_user_abort',true);   
set_time_limit(0);

对于第一个我运行phpinfo()并且它确实向我确认ignore_user_abort已启用,这意味着该部分显然不是问题。

1 个答案:

答案 0 :(得分:0)

即使用户关闭了页面,也可以使用ignore_user_abort(true)保持脚本正常运行。