首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chrome下载按钮下载PHP文件而不是PDF

Chrome下载按钮下载PHP文件而不是PDF
EN

Stack Overflow用户
提问于 2021-08-06 16:52:39
回答 1查看 172关注 0票数 0

网上有很多类似的问题,它们似乎都不是完全相同的场景,也没有提供任何关于正在发生的事情或如何解决它的见解。我希望我可以在我的测试中提供更多的信息,并缩小到我认为正在发生的事情和导致这个问题的范围。

我在屏幕上回显和预览通过SSRS创建的PDF文件,大多数时候我可以看到明确设置的正确标题,但我有一个似乎更改了Content-Control标题的报告类型。当这种情况发生时,Chrome中的下载按钮将提示下载我的controller.php文件,而不是PDF。

我使用的是在IIS服务器上运行的PHP。下面是我在代码中显式设置的头文件:

代码语言:javascript
复制
   header('content-type:application/pdf');
   header('Cache-Control: store; cache; no-revalidate');
   header('Content-Disposition: inline; filename=' . $this->sFileName . '.pdf');

对于我输出的大多数报告,中的标题都与这些值相匹配。下面是一个正确输出的报价报告示例:

以下是在Chrome PDF预览器中单击download按钮时的结果:

在我对多个报告的测试中,有一个特别的报告,Order报告,它似乎总是更改Content-Disposition头:

以下是在Chrome PDF预览器中单击download按钮时的结果:

我运行了一个测试,其中我注释掉了上面设置的Cache-Control标题行,并重新运行了Quote报告。对于Cache-Control头,我得到了与订单报告相同的结果,并且它下载的是我的controller.php文件,而不是PDF。这就是为什么我认为它与导致这种情况的头部有关。在我的代码中没有其他地方显式地设置了头文件,一定是有什么东西改变了它。我希望有人知道一些关于这个头的信息,特别是在PHP中,这可能会导致值发生变化。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-09 13:01:26

我能够在我的场景中解决这个问题。

我最终意识到的是,每次我打印订单报告时,我的标题都没有被发送。检查最后一行上的headers_sent()的状态时返回false

现在,为什么它不只为这一种报告类型发送标题,我不知道...仔细地一遍又一遍地遍历代码行,每一行代码看起来都与我打印Quote报告时完全相同。然而,报价报告始终如一地按预期发送报头,并将$file$line参数传递给headers_sent()输出正确的文件和行号。我之所以注意到这一点,是因为订单报告命中了我的session_start()代码,而如果输出了headers,它就不会出现这种情况。这非常奇怪,因为订单报告仍然输出到屏幕上,所以我真的不知道为什么它认为标题没有发送。

我最终所做的只是在回显报告之后添加了一个ob_flush(),以确保发送内容和标头。这似乎一直在起作用。

如果任何人对为什么没有发送报头有任何见解。我很有兴趣听到你的评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68685100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档