If I understand you correctly it's a common problem. I solved it by using ob_start at the beginning of my index.php (start/root/entry file) before ANY output occures and for the download I do the following:
ob_end_clean();
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". filesize("thefileinquestion").";");
header("Content-disposition: attachment; filename=thefileinquestion");
$fp = fopen(thefileinquestion, "r");
while(!feof($fp)){
$buffer = fread($fp, 1024);
echo $buffer;
flush();
}
fclose($fp);
die();
Update
The ob_start
command buffers any output (eg via echo, printf) and prevents anything being send to the user BEFORE your actual download. The ob_end_clean
than stops this behavior and allows direct output again. HTH.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…