3

以下代码最特殊的问题。它向浏览器返回一个 pdf 报告。

function cart_aspdf() {
    trace('cart_aspdf_in');
    $file = 'order_WS000250.pdf';
    header('Content-type: application/pdf');
    header('Content-Disposition: inline; filename="' . $file . '"');
    $file =  APPPATH.'pdfcache/'.$file;
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    header('Accept-Ranges: bytes');
    trace('cart_aspdf_readfile');
    @readfile($file);
    trace('cart_aspdf_out');
}

Opera,firefox,ie,safari 中的跟踪输出如您所料:

  1. cart_aspdf_in
  2. cart_aspdf_readfile
  3. cart_aspdf_out

但是 chrome 的跟踪显示以下内容,这似乎表明该函数至少被调用了两次,如果不是三次的话。为什么会这样?

  1. cart_aspdf_in
  2. cart_aspdf_readfile
  3. cart_aspdf_out
  4. cart_aspdf_in
  5. cart_aspdf_readfile
  6. cart_aspdf_in
  7. cart_aspdf_readfile
  8. cart_aspdf_out

如果我省略 content-type 行,则不会出现问题,但是 chrome 显示了没有用的原始 pdf 数据

4

1 回答 1

0

我遇到了同样的问题。

header('Content-Disposition: inline;');

无论出于何种原因,当内容处置是内联时,它会调用该页面两次。

这给了我尝试使用引荐来源网址的问题,因为第二次调用没有传递引荐来源网址数据。

使用

header('Content-Disposition: attachment;');

只运行一次,但不会在浏览器 PDF 查看器中显示。它将改为下载文件。

我认为这需要发布在 chrome 的 bugtracker 上。这很烦人,并且对于流式传输文件会浪费带宽。

于 2013-09-26T21:58:14.267 回答