Выдача файла php скриптом

vorona
На сайте с 31.01.2010
Offline
91
1403


session_start();


if (!isset($_SESSION['load']) || $_SESSION['load']=="" || $_SERVER['HTTP_REFERER']!=="http://site.org/file".$_GET['id']."")
{
Header ('Location: http://site.org/file'.$_GET['id']);
exit();

}else{
$file = ("путь к файлу");
header ("Content-Type: application/octet-stream");
header ("Accept-Ranges: bytes");
header ("Content-Length: ".filesize($file));
header ("Content-Disposition: attachment; filename=".$file);
readfile($file);
}

Суть вот в чем:

на сайте есть страницы с описанием файлов (http://site.org/file'.$_GET['id']). На этой странице расположена ссылка на скачивание файла, код скачивания файла выше. Это сделано с той целью, чтобы скрыть прямые ссылки и чтобы скачивать файл можно было только прийдя с http://site.org/file'.$_GET['id']

В связи с тем, что мы изменяем прямой адрес к файлу на адрес http://site.org/load'.$_GET['id'], выдача файла происходит с помощью php скрипта (код в else).

Но вот огромная проблема есть: при скачивании файла все 256 МБ оперативы забиваются за раз.

Как решить проблему?

AGIVEO (http://agiveo.net/) - бесплатная браузерная многопользовательская онлайн игра в жанре футбольного менеджера =)
C
На сайте с 04.02.2005
Offline
291
#1


$memsize = 1 * (1024 * 1024);

$fHandle = fopen($file, 'rb');
$buffer = '';
while (!feof($fHandle)) {
$buffer = fread($fHandle, $memsize);
echo $buffer;
ob_flush();
flush();
}
fclose($fHandle);
unlimbox
На сайте с 03.01.2008
Offline
56
#2
Как решить проблему?

Если у Вас свой сервер или VPS и Вы используете Nginx, то посмотрите в сторону внутренних редиректов Nginx'а.

JamBlog.ru (http://jamblog.ru)
TF-Studio
На сайте с 17.08.2010
Offline
334
#3

считывать файл кусками и отдавать

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий