一个网站我正在努力根据客户输入构建一个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已启用,这意味着该部分显然不是问题。