输出缓冲的php文件下载

时间:2012-10-31 03:04:29

标签: php http-headers download

我可以这样做吗?

ob_start();
header("Content-Type: application/msword");
header("Content-Disposition: attachment; filename=".$title);
header("Content-Length: ".$size);
header("Content-Transfer-Encoding: binary");
readfile($path);
ob_end_flush();

目前我正在下载正确命名的文件,但该文件的内容是包含上述代码的php的html输出。

我已经验证了$ path是正确的。一个糟糕的$ size会导致这种情况发生吗? 我也在ob_start()之后直接尝试了ob_flush()。

编辑:当前代码:

if (file_exists($path)){
    ob_start();
    header("Content-Type: application/msword");
    header("Content-Disposition: attachment; filename=".$title);
    header("Content-Length: ".filesize($path));
    header("Content-Transfer-Encoding: binary");
    readfile($path);
    ob_end_flush();
    die();
    } else die ("Not Found");

以上代码会导致同样的问题。文件下载,命名正确,显然存在并且大小正确,但文件内容是页面的html输出。

提前致谢

我刚注意到这是在下载(错误)的文件的最后: “int(14)content”

但我并不是故意在我的代码中输出任何内容。

1 个答案:

答案 0 :(得分:1)

也许一些调试可能会有所帮助:

if (file_exists($path)) {
  ob_start();
  header("Content-Type: application/msword");
  header("Content-Disposition: attachment; filename=".$title);
  header("Content-Length: ".filesize($path));
  header("Content-Transfer-Encoding: binary");
  readfile($path);
  ob_end_flush();
  die(); // To not send the HTML afterwards
} else die("Not found");