Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Закачка файлов через PHP, часть 1 (с поддержкой докачки)

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вс Dec 10, 2006 2:24 pm    Заголовок сообщения: Закачка файлов через PHP, часть 1 (с поддержкой докачки)
Ответить с цитатой

Автор: Алимов Рустем

Для реализации этого скрипта на Вашей страничке поместите следующую ссылку:

<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
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис