我有一个PDF导出,需要一段时间来创建PDF.我希望用户能够单击导出链接并立即显示下载对话框.这样他们就可以开始下载并等待它完成.而不是单击链接,等待生成,然后再次等待下载.
<?PHP header('Content-Type: application/pdf'); header('Content-disposition: attachment; filename=test.pdf'); flush(); // time consuming PDF creation happens here sleep(15); echo 'pdf contents would be here';
我们的想法是将相应的标题,flush()发送到浏览器,慢慢创建PDF并最终将其发送到浏览器.
这在chrome中非常有效.下载对话框会立即弹出,睡眠是下载等待时间的一部分.
在Firefox和InternetExplorer中,这不起作用.这些浏览器在显示下载对话框之前等待整整15秒.
任何想法如何使下载对话框立即弹出将不胜感激.
某些浏览器在显示下载对话框之前等待实际内容.
因此,解决方案很简单:在创建PDF内容之前发送一些PDF内容.
因此,解决方案很简单:在创建PDF内容之前发送一些PDF内容.
等一下.
在你拥有之前你怎么发送东西?
这听起来像需要时间机器,对吗?
别担心,有办法绕过它.
PDF content starts with %PDF
,因此您只需在调用flush()之前发送%PDF.
PDF创建完成后,在回显之前删除新创建的PDF内容的前4个字节.
<?PHP // disable output buffering while (@ob_end_clean()); header('Content-Type: application/pdf'); header('Content-disposition: attachment; filename=test.pdf'); // send some content to trigger the download dialog echo '%PDF'; flush(); // time consuming PDF creation happens here sleep(15); $pdfContent = '%PDF-pdf contents would be here'; echo substr($pdfContent,4);
原文地址:https://www.jb51.cc/php/137348.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。