|
Автор |
Сообщение |
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Автор: Алимов Рустем
Для реализации этого скрипта на Вашей страничке поместите следующую ссылку:
<A HREF="http://my.server.ru/download.php?name=need_file.rar" target="_top">need_file.rar</A>
для закачиваемого файла. В приведенном примере файлы находятся в подкаталоге download, а через запрос передается только имя файла.
<?php
$fn = $HTTP_GET_VARS['name'];
$filename = './download/' . $fn;
if(strstr($fn, '/'))
{
// небольшая защита от попыток закачки из других каталогов
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 403 Forbidden");
exit;
}
if(!file_exists($filename))
{
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 404 Not Found");
exit;
}
$fsize = filesize($filename);
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
$fd = @fopen($filename, "rb");
if(!$fd)
{
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 403 Forbidden");
exit;
}
// Если запрашивающий агент поддерживает докачку
if($HTTP_SERVER_VARS["HTTP_RANGE"])
{
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if($range)
fseek($fd, $range);
}
$content = fread($fd, $fsize);
fclose($fd);
if($range)
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 206 Partial Content");
else
header($HTTP_SERVER_VARS["SERVER_PROTOCOL"] . " 200 OK");
header("Content-Disposition: attachment; filename=$fn");
header("Last-Modified: $ftime");
header("Accept-Ranges: bytes");
header("Content-Length: " . ($fsize-$range) );
header("Content-Range: bytes $range-".($fsize -1). "/" . $fsize);
header("Content-Type: application/octet-stream");
print $content;
exit;
?>
При необходимости можно вести протокол закачек.
Обратите внимание!
При открытии файлов функцией fopen более корректным является использование ключа "rb". |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|