【问题标题】:Downloading invoices (PDF) does not complete下载发票 (PDF) 未完成
【发布时间】:2010-12-28 00:02:05
【问题描述】:

我们有一个在 IIS 6.0 服务器上运行的 magento 商务网站,其中 PHP 5.2.11 运行 magento。

每当用户尝试使用打印从管理面板将 pdf 下载到他们的计算机时,下载都不会完成。我可以看到完整的文件已下载到计算机,但浏览器仍然一直说它正在下载。这意味着文件最终会以 .part 保存,用户无法以 pdf 格式打开文件。如果我删除 .part 由 firefox 创建的扩展名,那么我可以正确查看 pdf。这意味着数据从服务器完整发送到浏览器,但下载不会终止。

在开始下载 pdf 时查看下面的响应标题

HTTP/1.x 200 OK
Cache-Control: must-revalidate, post-check=0, pre-check=0
Pragma: public
Content-Length: 1456781
Content-Type: application/pdf
Content-Encoding: gzip
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Last-Modified: Fri, 18 Dec 2009 10:23:37 +0000
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET, PHP/5.2.11
Content-Disposition: attachment; filename=invoice2009-12-18_10-23-37.pdf
Date: Fri, 18 Dec 2009 10:23:37 GMT

我想这与发送整个文件后不关闭连接有关吗?请帮忙!

谢谢。

【问题讨论】:

    标签: php iis pdf download magento


    【解决方案1】:

    我遇到了完全相同的问题(Apache),我通过关闭响应的 gzip 压缩暂时解决了这个问题。我的猜测是 Magento 报告给浏览器的大小(它是从 PDF 内容的 strlen() 调用中获得的)并不能反映浏览器在稍后被压缩的情况下获得的真实内容大小。这会导致浏览器等待更多永远不会到达的数据..

    编辑:值得注意的是,在我的情况下,我是通过反向代理访问该站点的。

    【讨论】:

      【解决方案2】:

      您是否尝试过显式调用 exit;输出pdf数据后。听起来像是 IIS。

      【讨论】:

      • 我在哪里使用 exit();从 OrderController.php 和 Invoice.php 文件调用 pdfinvoicesAction()。有一个 _prepareDownloadResponse 函数用于创建 PDF。是否有 IIS 设置?
      • 不知道 IIS 设置,需要在 _prepareDownloadResponse 输出到浏览器后退出(抱歉,我的 magento 版本没有 pdf 发票,所以不能准确说明)
      • 谢谢马克,我在 $this->_prepareDownloadResponse 之后尝试了 exit() ,现在下载没有发生。我正在尝试找出 exit() 的确切位置。
      猜你喜欢
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2015-10-21
      • 2011-04-28
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多