Преамбула
Иногда появляется необходимость защитить файлы не только от hotlink`а, но и от прямого просмотра в браузере. Классический пример – видеогалерея: юзеру разрешаем смотреть фильм, но запрещаем его скачивать (ибо нефиг, пусть ходит к нам и смотрит, тратит свой трафик и накручивает нам счетчик!
). Особо рьяные и грамотные (ну очень хочется ему с*****ь данный ролик), просмотрев html-код увидят ссылку, по которой браузер тянет фильмец, скопируют ее и скормят wget`у/FlashGet`у/просто вставят в адресную строку браузера и все, наш суперфильм ушел гулять по интернетам. Но! Включив моск, можно сильно затруднить копипастерам жизнь.
И большинство из них уйдет не солонно хлебавши.
Ну-с, приступим.
Дано: 1 файл filische.flv, который лежит в директории /wwwroot/MediaLibraries/videos/filische.flv
Надо:
- показать фильм юзеру
- не дать скачать фильм к юзеру на комп
Собственно, сам алгоритм:
- Запрещаем к просмотру файлы по маске. В данном случае это *.flv и *.mp4:
в файле .htaccess, который находится в корневой директории пишем:- <Files ~ «\.(flv|mp4)»>
- order allow,deny
- deny from all
- </Files>
- Создаем файл, который будет обрабатывать запросы на выдачу медиафайлов. В моем примере это файл /wwwroot/output/stream/media_handler.php. Код media_handler.php:
- header(«Content-type: video/mp4″); //говорим браузеру, что мы ни фига не пхп-фaйл, а видео;
- $output_file=readfile($_SERVER['DOCUMENT_ROOT'].»/wwwroot/MediaLibraries/videos/filische.flv»); //читаем файл;
- print $output_file; //помещаем прочитанный файл в поток
- Создаем еще один .htaccess, который будет запрещать обращение к файлу /wwwroot/output/stream/media_handler.php через браузер. Ибо если media_handler.php будет доступен из браузера, то все сделанное выше не имеет никакого смысла:
- order allow,deny
- deny from all
- allow from <ваш_айпи_сервера> // важный момент: этой директивой мы говорим, что обращаться к файлу media_handler.php можно только с нашего сервера. Т.е. $_SERVER['REMOTE_ADDR'] при обращении к media_handler.php должен == <ваш_айпи_сервера>
- Кладем только что созданный .htaccess в директорию /wwwroot/output/stream/ – его действие должно распространяться только на media_handler.php
- Ну и непосредственно демонстрация нашего видео:
print "<object width='260' height='195' data='/swf/uppod.swf' type='application/x-shockwave-flash' id='videoplayer'>";- print «<param name=’bgcolor’ value=’#000000′>»;
- print «<param name=’allowFullScreen’ value=’true’>»;
- print «<param name=’allowScriptAccess’ value=’always’>»;
- print «<param name=’wmode’ value=’opaque’>»;
- print «<param name=’movie’ value=’/swf/uppod.swf’>»; //путь к плееру. Я использую uppod, неплохой плеер. Разработан нашими разработчиками, кстати
Сайт разработчиков uppod.ru - print «<param name=’flashvars’ value=’m=video&file=/wwwroot/output/stream/media_handler.php&poster=/path/to/poster.jpg’>»;
- print «</object>»;
Собственно все. Видео демонстрируется юзеру, юзер скачать не может, ибо посылается на 403