php - 内容类型导致 chrome 调用函数两次

标签 php google-chrome pdf content-type

以下代码最奇特的问题。它向浏览器返回一个 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

如果我省略了内容类型行但随后 chrome 显示了没有用的原始 pdf 数据,则不会出现此问题

最佳答案

我遇到了同样的问题。

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

无论出于何种原因,当 content-disposition 是内联时,它会调用页面两次。

这让我在尝试使用引荐来源网址时遇到问题,因为第二次调用没有传递引荐来源网址数据。

使用

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

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

我认为这需要发布在 chrome 的 bugtracker 上。这非常烦人,并且对于流式传输文件来说是一种带宽浪费。

关于php - 内容类型导致 chrome 调用函数两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198085/

相关文章:

google-chrome - Chrome 中 CTAP2 (FIDO2) 协议(protocol)的实现不完整?

javascript - 在 Chrome 中将 &lt;script&gt; 标记附加到 <head> 失败

java - 无法在 java 中获得与 Adob​​e 中的公钥显示相匹配的公钥显示

php - 如果语句失败(mysql)

php - 自动生成pkpass文件并发送到钱包Iphone

php - 未从数据库 PHP LongBlob 接收图像

javascript - Chrome 不会在 SVG 中缓存图像

java - 将 PDF 内容保存到我的 sql 表

pdf - 修复 PDF 编码

php - 通知 : Undefined index: submit in (Path)