HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Дать добро на закачку файла(php)...?
  #1  
Старый 25.03.2008, 00:25
Dencity
Познающий
Регистрация: 28.02.2008
Сообщений: 49
С нами: 9579282

Репутация: 22
По умолчанию Дать добро на закачку файла(php)...?

Привет всем...Подскажите плыз как дать добро на закачку файла с Http сервера определенному юзеру...тоесть просто с сайта.Помните скачку с сайтов мп3 ,так там если не зареган, то скрипт те файл не даст скачать...как такое реализовать?Знаю что вродь решается это путем отправки определенных заголовков,но ненаю каких...Подскажите где почитать или так скажите...
 
Ответить с цитированием

  #2  
Старый 25.03.2008, 02:31
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,315
С нами: 10248806

Репутация: 2371


По умолчанию

Вопрос задан некорректно...
Перед скачкой сделать проверку на регу + если у ссылок прямые ссылки, то сделать их не прямыми с хешем и шифровкой Ip...
 
Ответить с цитированием

  #3  
Старый 25.03.2008, 02:48
gibson
Постоянный
Регистрация: 24.02.2006
Сообщений: 447
С нами: 10636106

Репутация: 705
По умолчанию

PHP код:
include 'cdownload.inc.php';

$download = @new cdownload($_request['download']);
$download->enabledcountry 'localhost,local network,ua,ru';
$download->whitelist '127.0.0.1,10.1.3.94';
$download->banlist '184.12.13.5';
$download->username 'pupkin';
$download->speedlimit 10;
$download->sizelimit 2*mb;
$download->downloadfile();

?>

Код класса
# filename: cdownload.inc.php

define('kb',1024);
define('mb',kb*1024);

class cdownload {
# -------------------------------------------------------------------------------------
# Описание : выгрузка файла пользователю с поддержкой докачки и ограничением скорости
# -------------------------------------------------------------------------------------
var $downloadtimelimit = 300; # Лимит времени работы функции выгрузки
var $username = 'anonymous/'; # Пользователь по умолчанию
var $sizelimit = 0; # Лимит объема выгрузки (0 - без ограничений)
var $speedlimit = 5; # Лимит скорости выгрузки, кб/с
var $enablepartial = 1; # Разрешение докачки (0 - запрещена)
var $statfolder = 'stats/'; # Папка расположения статистики
var $filename; # Выгружаемый файл (должен быть задан!)
var $enabledcountry; # Разрешенные страны (список разделенный запятыми, 
# null - разрешеные все)
var $disabledcountry; # Запрещенные страны (список разделенный запятыми)
var $whitelist; # Список разрешенных ip-адресов (список разделенный запятыми)
var $banlist; # Список запрещенных ip-адресов (список разделенный запятыми)

var $transferbytes = 0; 

function cdownload($filename,$username) {
$this->filename = $filename;
if ($username)
$this->username = ereg_replace('[^0-9a-za-z_\-]','',$username).'/';
$fullpath = $this->statfolder.$this->username;
if (!file_exists($fullpath))
mkdir($fullpath);
} # end cdownload

function verifycountry() {
$usercountry = $this->getcountry($_server['remote_addr']);
if (
($this->enabledcountry && !in_array($usercountry,split(',',$this->enabledcountry))) ||
($this->disabledcountry && in_array($usercountry,split(',',$this->disabledcountry))) ||
($this->whitelist && !in_array($_server['remote_addr'],split(',',$this->whitelist))) ||
($this->banlist && in_array($_server['remote_addr'],split(',',$this->banlist)))
) {
header('http/1.0 403 forbidden');
header('warning: 99# you country or ip address disabled');
exit;
}
}

function downloadfile() {
$this->verifycountry();

$blocksize = 8192;
$headererrortext = 'error! a possible size is exceeded';

$this->username = ereg_replace('[^0-9a-za-z_\-]','',$this->username).'/';
$this->filename = preg_replace('/\.{2}/','',$this->filename);

if (!file_exists($this->filename)) {
header('http/1.0 404 not found');
exit;
}
$fsize = filesize($this->filename);
$ftime = date('d, d m y h:i:s t', filemtime($this->filename));
$fd = @fopen($this->filename, 'rb');
if (!$fd) {
header('http/1.0 403 forbidden');
exit;
}

if ($this->enablepartial && ereg('bytes=([0-9]+)-',$_server['http_range'],$range)) {
header('http/1.1 206 partial content');
$range = $range[1];
fseek($fd, $range);
} else 
header('http/1.1 200 ok');

$fullpath = $this->statfolder.$this->username;
$this->transferbytes = file($fullpath.$_server['remote_addr']);
$this->transferbytes = $this->transferbytes[0];


if ($this->sizelimit && $this->transferbytes>$this->sizelimit) {
header('http/1.0 403 forbidden');
header('warning: 99# '.$headererrortext);
exit;
}

$fp = fopen($fullpath.$_server['remote_addr'],'w');

header('content-disposition: attachment; filename='.ereg_replace('^.*/','',$this->filename));
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');
set_time_limit($this->downloadtimelimit);

while (!feof($fd)) {
if ($this->sizelimit && $this->transferbytes>$this->sizelimit) {
header('warning: 99# '.$headererrortext);
exit;
}
echo fread($fd, $blocksize);
$this->transferbytes += $blocksize;
fseek($fp,0);
fwrite($fp,$this->transferbytes);
if ($this->speedlimit)
usleep(8000000/$this->speedlimit);
}
fclose($fp);

fclose($fd);
} # end downloadfile

function getcountry($ip) {
$result = 'unknow';
if (ereg('127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}',$ip))
return 'localhost';
if (ereg('10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|191\.168\.[0-9]{1,3}\.[0-9]{1,3}|'.
'172\.16\.[0-9]{1,3}\.[0-9]{1,3}',$ip))
return 'local network';
if ($ip!='') {
$sock = fsockopen('whois.ripe.net',43,$errno,$errstr);
if ($sock) {
fputs ($sock,$ip."\r\n");
while (!feof($sock) && !preg_match('/country:\s*(\s*)/',$buf,$matches)) 
$buf = fgets($sock,128);
$result = strtoupper($matches[1]);
}
fclose ($sock);
}
return $result;
} # end getcountry
}

?> 
посмотри тут http://articles.org.ru/ контролируемая отдача файлов
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.