
27.04.2010, 14:02
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
668
|
|
код выложил 440hz на форуме php.ru поддерживает докачку ...
PHP код:
<?php
/**
* @author 440hz
* @copyright 2007
*/
session_start();
require_once ('includes/config.php');
if (isset($_GET['id']))
{//ID файла в базе
if (isset($_SESSION['level']) && $_SESSION['level'] === '2')
{ // Проверка уровня пользователя
//Просим БД дать нам имя файла по его ID
$res = $db->mysql_qw('SELECT `name`,`cat` FROM `video` WHERE `id`=?', $_GET['id']) or
die();
$fetch = $db->mysql_fetch($res);
// отдаваемое файло
$filename = 'movie/' . $fetch['cat'] . '/' . $fetch['name'];
// есл файла нет
if (!file_exists($filename)) {
header("HTTP/1.0 404 Not Found");
exit;
}
// получим размер файла
$fsize = filesize($filename);
// дата модификации файла для кеширования
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
// смещение от начала файла
$range = 0;
// пробуем открыть
$handle = @fopen($filename, "rb");
// если не удалось
if (!$handle) {
header("HTTP/1.0 403 Forbidden");
exit;
}
// Если запрашивающий агент поддерживает докачку
if ($_SERVER["HTTP_RANGE"]) {
$range = $_SERVER["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
// смещаемся по файлу на нужное смещение
if ($range) {
fseek($handle, $range);
}
}
// если есть смещение
if ($range) {
header("HTTP/1.1 206 Partial Content");
} else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=\"{$filename}\"");
header("Last-Modified: {$ftime}");
header("Content-Length: " . ($fsize - $range));
header("Accept-Ranges: bytes");
header("Content-Range: bytes {$range}-" . ($fsize - 1) . "/" . $fsize);
// подправляем под IE что б не умничал
if (isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],
'MSIE'))
Header('Content-Type: application/force-download');
else
Header('Content-Type: application/octet-stream');
while (!feof($handle)) {
$buf = fread($handle, 512);
print ($buf);
}
fclose($handle);
} else {
header("HTTP/1.0 403 Forbidden");
exit;
}
} else {
header("HTTP/1.0 403 Forbidden");
exit;
}
?>
|
|
|