【问题标题】:Chrome Download Button downloading PHP file instead of PDFChrome 下载按钮下载 PHP 文件而不是 PDF
【发布时间】:2021-10-11 13:20:18
【问题描述】:

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

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

我正在使用在 IIS 服务器上运行的 PHP。以下是我在代码中明确设置的标题:

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

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

这是单击 Chrome PDF 预览器中的下载按钮时的结果:

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

这是单击 Chrome PDF 预览器中的下载按钮时的结果:

我运行了一个测试,其中我注释掉了我在上面设置的 Cache-Control 标题行并重新运行了报价报告。我为 Cache-Control 标头获得了与订单报告相同的结果,并且在下载我的 controller.php 文件而不是 PDF 时获得了相同的结果。这就是为什么我认为它与导致此问题的标题有关。没有其他地方我在我的代码中明确设置该标头必须更改它。我希望有人知道一些关于该标头的信息,特别是在 PHP 中可能会导致值发生变化。

提前致谢!

【问题讨论】:

  • 看起来请求命中了正在运行的 ASP.net 服务,而是下载了控制器。如果不使用,您应该禁用 IIS...无论发生什么代理,IIS 都具有优先权。 (我的一般猜测)。 X-Powered-By 表明两个端点都受到不同服务的影响。如果我不得不从中进行有根据的猜测,服务器上的配置错误似乎是您的问题。
  • 感谢您的建议。我删除了 IIS 中的 ASP.NET HTTP 响应标头。它不再出现在 x-powered-by 标头中(现在只是 PHP/7.3.3),但缓存控制仍在更改并且仍然遇到相同的问题。
  • 去掉标头并不意味着服务不会被请求击中,你是如何代理请求的? Nginx/Apache2?这是可能的问题。
  • 抱歉,服务器配置不是我的专业领域。这是我通过 IIS 在本地托管的开发站点。据我所知,我没有配置代理。
  • 我的猜测是 IIS 是你的问题。它代理到您的 PHP 应用程序,而不是转发请求。因此,如果它看到它可以处理的请求,它会处理它而不是传递请求。最好的办法是在本地使用 Apache2 或 Nginx,而不是其他 Web 应用程序。

标签: php google-chrome pdf reporting-services


【解决方案1】:

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

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

现在,为什么它不只为这一种报告类型发送标题,我不知道...从一遍又一遍地仔细检查代码行,一切似乎与我打印报价时相同报告。然而,报价报告始终按预期发送标题并将$file$line 参数传递给headers_sent() 输出正确的文件和行#,我正在回应从SSRS 返回的PDF。我注意到这一点是因为订单报告触及了我的session_start() 代码,如果输出标题,它不应该出现在该代码中。这很奇怪,因为订单报告仍在输出到屏幕上,所以我真的不知道为什么它认为标题没有被发送。

我最终做的只是在回应报告后添加一个ob_flush(),以确保发送内容和标题。这似乎一直有效。

如果有人对为什么没有发送标头有任何见解。我很想听听 cmets 的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2021-12-19
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2017-03-05
    相关资源
    最近更新 更多