这是一个简单的玩具脚本,但我遇到了问题。我试图让用户使用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()部分。
答案 0 :(得分:3)
您收到这些错误是因为您在发送标题之前将内容发送到浏览器。
要解决此问题,您需要删除echo "thanks";
。