Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Скачивание больших файлов


Автор: Bounty 16.1.2008, 16:22
Помогите, плиз!

У меня стоит задача, чтобы пользователь с закрытой странички скачивал файлы.
Сами файлы лежат за пределами www (на уровень выше)
Проблема в том, что маленькие файлы скачиваются просто, а вот большие (видеоролики, например, 100Мб) вообще не скачиваются...
Вот код файла в который скачивает файлы:
Код

header("Content-type: application/force-download;"); 
$fname="z://home/lslalala.com/inc/down".$path;
$len = filesize( $fname );
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment; filename="'.basename($fname).'"'); 
header("Content-Length: ".$len);
readfile($fname);

Я уже не знаю, в чем может быть проблема...:(

Автор: flashaa 16.1.2008, 16:27
Цитата(Bounty @  16.1.2008,  16:22 Найти цитируемый пост)
а вот большие (видеоролики, например, 100Мб) вообще не скачиваются...

У скрипта есть ограничения на используемую память и время работы... Ограничение по дефолту 8 МБ.. Подумайте, как скрипт может считать 100 МБ и уместить в 8 МБ. Потом при отправке идет время... По дефолту это 30 сек. 
Выдавать такие громадные файлы скриптом соответственно неэффективно.

Автор: MoLeX 16.1.2008, 16:36
Цитата(Bounty @  16.1.2008,  16:22 Найти цитируемый пост)
$fname="z://home/lslalala.com/inc/down".$path;

а так
Код

$fname="../".$path;


Добавлено через 1 минуту и 2 секунды
Цитата(flashaa @  16.1.2008,  16:27 Найти цитируемый пост)
У скрипта есть ограничения на используемую память и время работы... Ограничение по дефолту 8 МБ.. Подумайте, как скрипт может считать 100 МБ и уместить в 8 МБ. Потом при отправке идет время... По дефолту это 30 сек. Выдавать такие громадные файлы скриптом соответственно неэффективно.


точно, у меня то это фсе намного больше стоит))) вот не полные пути и посоветовал

Автор: Bounty 25.1.2008, 11:08
Я так поняла, что именно при readfile файл в опу идет, а на сервере стоит ограничение много меньшее 100Мб...(((
Как быть иначе? ведь файлы за пределами www

Автор: flashaa 25.1.2008, 11:39
Цитата(Bounty @  25.1.2008,  11:08 Найти цитируемый пост)
Как быть иначе? ведь файлы за пределами www 

Думаю, здесь и проблема. Если файл доступен юзеру он должен быть в www.
Это исходя просто из логики. Вообще с такой задачей не сталкивался и сходу не могу сообразить, как лучше. 
Можно, допустим прикрывать ваши файлы htaccess. А когда пользователь получает доступ к файлу, дописывать правило mod_rewrite c каким-то случайным хешем.

К примеру, такую строку: RewriteRule ^file/sdas123fsklg123h downloads/имя_вашего_файла_на_скачивание
и соответственно пересылать пользователя на адрес file/sdas123fsklg123h, чтобы он мог скачать. При этом истинное имя и расположение файла он не узнает.

Если от условия, что файлы выше www, не уйти, то можно попробовать решить две проблемы(с памятью и временем работы) так: 
1) считать файл по фрагментам, тогда память не будет занята. 
2) установить set_time_limit(0) - это отключит ограничение по времени, хотя не уверен на счет того, что это разрешается на всех хостингах.

Имхо, здесь ошибка в архитектуре. Донлоад файлов через скрипт таким образом это же совсем для скриптов задача.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)