Если я вас правильно понимаю, это обычная проблема. Я решил это, используя ob_start в начале моего index.php (start / root / entry file) до ЛЮБОГО вывода, и для загрузки я делаю следующее:
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();
Обновление
Команда ob_start
буферизует любой вывод (например, через echo, printf) и предотвращает отправку чего-либо пользователю ПЕРЕД фактической загрузкой. ob_end_clean
чем останавливает это поведение и снова разрешает прямой вывод. НТН.