0

我可以做这样的事情吗?

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)内容”

但我并没有故意在我的代码中的任何地方输出这个。

4

1 回答 1

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");
于 2012-10-31T03:07:42.627 回答