Загрузка очень большого файла (например, фильма).

Andrei

Guest
Загрузка очень большого файла (например, фильма).

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

Скрипт примерно такой:
PHP:
	 header("Content-Description: File Transfer");	
     header ("Content-Type: application/force-download");
	 header ("Content-Disposition: attachment; filename=video.avi");
	 header ("Content-length: ".$filesize);
	 header("Content-Transfer-Encoding: binary");
	 
	while(!feof($handle))
	{
	 print(fread($handle,1024*8));
	 flush();
	}
	
	fclose ($handle);
	exit;
Какие у вас есть идеи ?
 

Кром

Новичок
Самая хорошая идея, это не отдавать файл через скрипт.
Есть идея еще лучше, - отдавать файл по ftp протоколу.
 

Setor

Новичок
Я когда-то сталкивался с подобной проблемой. Решение было одно - отдавать файл по кусочкам... И на форуме это уже обсуждалось! Для фильма потребуется 20-30 кусочков по 25Мб ;) Потом их правда, придётся ещё чем-то склеить ;)
 

Andrei

Guest
2Kром
Не совсем понял, что значит отдавать по фтп ? Немножко поподробнее, если можно.

2Setor
Такой подход не подходит, потому что, как ты сам правильно написал, чем пользователь будет склеивать файлы у себя на компе?

Речь, вообщем-то, идет о создании video on demand портала. Т.е. пользователь логиниться, платит деньги и теперь должен получить возможность скачать фильм. Я совсем недавно в пхп - может думаю кардинально не в том направлении... Я так понимаю, что прямую ссылку на фильм нельзя давать по двум причинам:
1. Потому что любой, кто ее знает, сможет скачать фильм - или ?
2. Фильм, если он в формате, wmv, например, сразу будет открываться на проигрывание медиаплеером, что совсем неправильно.
Против второй проблемы есть идея архивировать фильмы в зип, но что делать с первой тогда? Что-то слышал о чуде под названием mod_rewrite, но не более, чем слышал.

Вообщем, вот такие дела. За любое просвещение буду чрезвычайно благодарен.
 

Setor

Новичок
Andrei
ну в этом случае тебе надо завести на каждого логин/пароль и рыть в направлении .htaccess и .htpasswd и апач будет просить пароль для доступа к директории...
 

Кром

Новичок
>Не совсем понял, что значит отдавать по фтп ?

Это значит, создать ftp сервис на сервере и в одну из директорий положить нужный файл.
 

MiRacLe

просто Чудо
1) фильмы лежат в директории /films/<name_of_film>/file.avi
2) устанавливаешь модуль для apache про который я написал выше
3) читаешь файл readme
4) понимаешь что там написано
5) создаешь таблицу в базе данных по образу и подобию той что описана в readme
6) в каждую папку с фильмом кладешь .htaccess в котором пишешь accessCookie_Engine On ... и т.д. (или один .htaccess в папку /films[зависит от реализации])
7) авторизуешь пользователя , берёшь у него деньги
8) ставишь ему куку c произвольным значением, это же значение пишешь в таблицу созданную в п.5
9) даешь пользователю линк на фильм
10) пользователь качает фильм(не через скрипт,напрямую через apache,который не пустит пользователя без этой куки), ты в это время пересчитываешь деньги
 
Сверху