PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – 收到标题后立即触发下载对话框大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个PDF导出,需要一段时间来创建PDF.我希望用户能够单击导出链接并立即显示下载对话框.这样他们就可以开始下载并等待它完成.而不是单击链接,等待生成,然后再次等待下载.

这是PHP一个非常简单的例子:

<?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 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);

解决方案适用于任何语言,因为它不依赖于任何仅PHP功能.

如果要进行绝对最小值,还可以发送1个字节%,然后在回显之前仅删除一个字节.结果相同.

大佬总结

以上是大佬教程为你收集整理的php – 收到标题后立即触发下载对话框全部内容,希望文章能够帮你解决php – 收到标题后立即触发下载对话框所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: