Как правильно отдавать большие файлы через fpassthru()
Когда требуется отдать клиенту файл большого размера, echo filegetcontents('filename') может вызвать ошибку, поэтому файл нужно отдавать порциями. Этот пример показывает, как это можно сделать.
<?php
$file = 'big_file.mpg';
// Заголовки, которые расскажут браузеру о том, что это за файл
header("Content-type: audio/mpeg");
header("Content-Disposition: attachment; filename=music.mp3");
header("Content-Length: " . filesize($file));
$f = fopen($file, 'rb'); // Открываем файл
fpassthru($f); // Теперь отправляем все содержимое клиенту