Отдача роликов во флеш плеер через PHP, правильно ли?

12
Ilekor
На сайте с 22.04.2009
Offline
138
1817

Народ, нужна ваша помощь. Пишу скрипт для защиты прямых ссылок на видео, что бы не тырили видео файлы на свои сайты.

Так вот собственно вопрос, правильно ли написан скрипт, потому что загрузка во флеш плеер идет, но может оборватся например на пол фильма и при нажатии на плей фильм начинается заново. Прошу подкорректировать что не так в скрипте.

сначала я проверяю, наш ли это пользователь смотрит или с другого сайта и если файл существует тогда отдаем пользователю фильм, а иначе отдаем рекламный ролик. Проверки я не выкладывал так как не это важно. А важна сама отдача ролика в плеер.


$file = "papka_video/".$flv;
$file_real = $file;

$extension = strtolower(substr(strrchr($file, "."), 1));

switch($extension){

case "flv": $type = "flv-application/octet-stream"; break;

case "mp4": $type = "video/mp4"; break;

default: $type = "application/force-download"; break;

}

// Fix IE bug [0]

$header_file = (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) ? preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1) : $file;

// Prepare headers

header("Pragma: public");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Cache-Control: public", false);

header("Content-Description: File Transfer");

header("Content-Type: " . $type);

header("Accept-Ranges: bytes");

header("Content-Disposition: attachment; filename=\"video.flv\";");

header("Content-Transfer-Encoding: binary");

header("Content-Length: " . filesize($file_real));

// Send file for download

if ($stream = fopen($file_real, 'rb')){

while(!feof($stream) && connection_status() == 0){

//reset time limit for big files

set_time_limit(0);

print(fread($stream,1024*8));

flush();

}

fclose($stream);

}

Лучший дорген 21 века AgDor(http://agdor.info)
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#1

может просто readfile()?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
N
На сайте с 06.05.2007
Offline
419
#2

LEOnidUKG, можно, но не долго.

и с перемоткой нужно продумать вопрос.

Кнопка вызова админа ()
Z1
На сайте с 09.12.2005
Offline
164
#3

ИМХО, это изврат... Надо такое делать не с помощью пхп, а напрямую средствами сервера.

Ilekor
На сайте с 22.04.2009
Offline
138
#4
netwind:
LEOnidUKG, можно, но не долго.
и с перемоткой нужно продумать вопрос.

Да, я где то находил готовый скрипт с перемоткой, но увы, не помню как находил и в истории не смогу найти.

zweroboy1:
ИМХО, это изврат... Надо такое делать не с помощью пхп, а напрямую средствами сервера.

Была бы возможность, сделал бы.

N
На сайте с 06.05.2007
Offline
419
#5
Ilekor:
Да, я где то находил готовый скрипт с перемоткой, но увы, не помню как находил и в истории не смогу найти.

Была бы возможность, сделал бы.

что случилось? мама запрещает программировать ? перескажи ей биографию Билла Гейтса.

Возможность всегда есть.

[umka]
На сайте с 25.05.2008
Offline
456
#6

Скрипт должен уметь отдавать partial content.

Лог в помощь!
orphelin
На сайте с 02.07.2006
Offline
261
#7

может быть по всему ролику проще урл сайта наложить и пусть себе тащат/пиарят на здоровье? или это не уместно?

Ilekor
На сайте с 22.04.2009
Offline
138
#8
netwind:
что случилось? мама запрещает программировать ? перескажи ей биографию Билла Гейтса.
Возможность всегда есть.

Вы находите смысл в этом посте?

Да и на ты мы не переходили.

rtyug
На сайте с 13.05.2009
Offline
263
#9

php flv

nginx никак не прикрутить для раздачи?

потому что, можно написать грабер в любом случае, например, такие же как и для youtube, он будет считывать поток данных который отдается во flash...

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
dkameleon
На сайте с 09.12.2005
Offline
386
#10

Ilekor, хидер с диапазонами есть, а обработки нету :)

Разбирайтесь:

	if (!isset($_SERVER["HTTP_RANGE"])) {
header ("HTTP/1.1 200 OK");
header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header ("Cache-Control: None");
header ("Pragma: no-cache");
header ("Accept-Ranges: bytes");
header ("Content-Disposition: inline; filename=\"$fn\"");
if (preg_match("#Opera(/| )([0-9].[0-9]{1,2})#", $_SERVER["HTTP_USER_AGENT"]) or preg_match("#MSIE ([0-9].[0-9]{1,2})#", $_SERVER["HTTP_USER_AGENT"])) {
header("Content-Type: application/octetstream");
} else {
header("Content-Type: application/octet-stream");
}
header ("Content-Length: $fs");
header ("Age: 0");
header ("Proxy-Connection: close");

@readfile(DIR_DOWNLOADS."/".$fn);
}else{
ereg("bytes=([0-9]+)", $_SERVER["HTTP_RANGE"], $m);
$contentSize = $fs - intval($m[1]);
$p1 = $fs - $contentSize;
$p2 = $fs - 1;
$p3 = $fs;
$p4= $p3 - $p1;
header ("HTTP/1.1 206 Partial Content");
header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header ("Cache-Control: None");
header ("Pragma: no-cache");
header ("Accept-Ranges: bytes");
header ("Content-Disposition: inline; filename=\"$fn\"");
if (preg_match("#Opera(/| )([0-9].[0-9]{1,2})#", $_SERVER["HTTP_USER_AGENT"]) or preg_match("#MSIE ([0-9].[0-9]{1,2})#", $_SERVER["HTTP_USER_AGENT"])) {
header("Content-Type: application/octetstream");
} else {
header("Content-Type: application/octet-stream");
}
header ("Content-Range: bytes $p1-$p2/$p3");
header ("Content-Length: $p4");
header ("Proxy-Connection: close");
$fd = @fopen(DIR_DOWNLOADS."/".$fn, "rb");
@fseek($fd, $p1, SEEK_SET);
while(!@feof($fd)) {
echo(@fread($fd, $p3));
}
@fclose($fd);
}

?>
Дизайн интерьера (http://balabukha.com/)
12

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