【发布时间】:2014-10-29 04:29:13
【问题描述】:
我正在开发的网站根据客户的输入构建 pdf,我决定一旦购买完成,即开始生成 pdf。原因是 pdf 可能达到 tp 50/60MB,我不希望客户端必须等待它完成。
我正在使用 Opencart,在结帐成功页面上,我有一个 Ajax 命令加载 PHP 脚本。
我的印象是用户可以在脚本启动后关闭页面,但由于某种原因,我发现如果我希望文件出现在我的服务器上,我必须等待 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 调用的函数中...
ini_set('ignore_user_abort',true);
set_time_limit(0);
对于第一个,我运行了 phpinfo(),它确实向我确认了 ignore_user_abort 已打开,这显然意味着该部分不是问题。
【问题讨论】:
-
这篇文章也可能有帮助/信息丰富:Does php execution stop after a user leaves the page?
-
这取决于您的设置。这个 [topic][1] 可能会有所帮助。 [1]:stackoverflow.com/questions/1280291/…
-
感谢您的链接,它们很有意义
-
大家好,我已经对问题进行了编辑,包括我从这些链接中学到的内容,我想知道是否还有任何其他可能导致脚本在窗口关闭后无法继续运行的问题?