php readfile打印文件到屏幕和下载

时间:2012-01-21 20:43:59

标签: php

这是一个简单的玩具脚本,但我遇到了问题。我试图让用户使用readfile()下载文件,但也让脚本写入页面。在浏览器中执行此脚本后,文件IS被下载,但似乎文件也被打印到屏幕上。另外我收到以下错误:

  

警告:无法修改标头信息 - 已在第11行的/Applications/XAMPP/xamppfiles/htdocs/test.php中发送的标头(由/Applications/XAMPP/xamppfiles/htdocs/test.php:8开始的输出)< / p>      

警告:无法修改标头信息 - 已在第12行的/Applications/XAMPP/xamppfiles/htdocs/test.php中发送的标头(在/Applications/XAMPP/xamppfiles/htdocs/test.php:8处开始输出)< / p>      

警告:无法修改标头信息 - 已在第13行的/Applications/XAMPP/xamppfiles/htdocs/test.php中发送的标头(在/Applications/XAMPP/xamppfiles/htdocs/test.php:8处开始输出)< / p>      

警告:无法修改标头信息 - 第14行/Applications/XAMPP/xamppfiles/htdocs/test.php中已经发送的标头(在/Applications/XAMPP/xamppfiles/htdocs/test.php:8处开始输出)< / p>

代码如下:

<?php 
$file = './1966.xlsx';

echo "thanks";


    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit();
?> 

我是否需要为整个脚本声明标头?我从php手册上获得了header和readfile()部分。

1 个答案:

答案 0 :(得分:3)

您收到这些错误是因为您在发送标题之前将内容发送到浏览器。

要解决此问题,您需要删除echo "thanks";