Как правильно выдавать файлы на загрузку через php?

Добрый день, есть скрипт который отдает файлы на загрузку пользователю

$fname=$_GET['fname'];
$prgid=$_GET['prgid'];
$f=fopen($fdown, 'r');
header("HTTP/1.1 200 OK");
header("Connection: close");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Content-Disposition: Attachment; filename=".$fname);
header("Content-Length: ".$fsize); 
while (!feof($f)) {
if (connection_aborted()) {
fclose($f);
break;
}
echo fread($f, 10000);
sleep(1);
}
fclose($f);

при скачивании файлов маленького размера, все идет по плану, но если размер файла большой, то скрипт "подвисает".
подскажите, что не так или есть другой способ скачивания файлов через php скрипт.
  • Вопрос задан
  • 4452 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А зачем так извращаться? Есть же readfile
Ответ написан
Комментировать
BoneFletcher
@BoneFletcher
Здесь подробно описаны несколько методов:
habrahabr.ru/post/151795

На мой взгляд лучше использовать специально предназначенные для этого модули:

Для nginx — X-Accel-Redirect
header('X-Accel-Redirect: ' . $file);
header('Content-Disposition: attachment; filename=' . basename($file));

Для apache — XSendFile
header('X-SendFile: ' . $file);
header('Content-Disposition: attachment; filename=' . basename($file));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы