代码之家  ›  专栏  ›  技术社区  ›  Emyr

客户端缺少内容处置标头

  •  1
  • Emyr  · 技术社区  · 14 年前

    exec("cd tex && latex {$_SESSION['sen_id']}.tex && pdflatex {$_SESSION['sen_id']}.tex", $output);
    $pdf = substr($file,0,-3).'pdf';
    if (file_exists($pdf)) {
      //header('Content-Description: File Transfer');
      header('Content-Type: application/pdf');
      //header('Content-Length: ' . filesize($pdf));
      header('Content-Disposition: attachment;filename='.date('Ymd-His').'-'.basename($pdf));
      header('Content-Transfer-Encoding: binary');
      header('Expires: 0');
      header('Cache-Control: no-cache');
      header('Pragma: no-cache');
      ob_clean();
      flush();
      readfile($pdf);
      exit;
    } else {
      echo '<h1>No PDF Produced</h1>';
      echo nl2br(print_r($output,true));
    }
    

    使用Wireshark,我注意到contentdispositionheader要么没有设置,要么没有到达客户端。

    HTTP/1.1 200 OK\r\n
    Date: Tue, 22 Jun 2010 14:15:10 GMT\r\n
    Server: Apache/2.0.55 (Ubuntu) mod_jk/1.2.14 mod_python/3.1.4 Python/2.4.3 PHP/5.1.2 mod_ssl/2.0.55 OpenSSL/0.9.8a mod_perl/2.0.2 Perl/v5.8.7\r\n
    X-Powered-By: PHP/5.1.2\r\n
    Set-Cookie: SESS0d6c65b0599f5b70f6bbc50cfc5b2f94=2b23ba1f74f5f1f641365e9fbb45870d; expires=Thu, 15 Jul 2010 17:48:30 GMT; path=/; domain=.<domain removed>\r\n
    Content-Transfer-Encoding: binary\r\n
    Expires: 0\r\n
    Cache-Control: no-cache\r\n
    Pragma: no-cache\r\n
    Connection: close\r\n
    Transfer-Encoding: chunked\r\n
    Content-Type: application/pdf\r\n
    \r\n
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   Artefacto    14 年前

    我不知道为什么头球会被剥掉,但是 this page 描述如何对内容处置标头中的文件名进行编码及其对浏览器互操作性的影响。

    在这些情况下,我选择了在PHP手册页面中编写的解决方案 here (见第一个例子)。

    your case