Привет всем...Подскажите плыз как дать добро на закачку файла с Http сервера определенному юзеру...тоесть просто с сайта.Помните скачку с сайтов мп3 ,так там если не зареган, то скрипт те файл не даст скачать...как такое реализовать?Знаю что вродь решается это путем отправки определенных заголовков,но ненаю каких...Подскажите где почитать или так скажите...
Вопрос задан некорректно... Перед скачкой сделать проверку на регу + если у ссылок прямые ссылки, то сделать их не прямыми с хешем и шифровкой Ip...
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/ контролируемая отдача файлов