Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: php контороль скачивания файлов
 
 автор: yuris_04   (26.11.2008 в 14:15)   письмо автору
 
 

Нашел в интернете php контороль скачивания файлов
(http://articles.org.ru/cn/showdetail.php?cid=5113), но не получается скачать файл испозьзуя php код приведенный ниже.

При обращении по ссылкам скачать1 и скачать2 ничего не происходит, даже ошибок не выдает, хотя в папке статистики stats пользователь anonymous создается.

в классе cdownload.inc.php есть переменная
var $filename; # Выгружаемый файл (должен быть задан!)

а как именно задать эту переменную?

т.е. папка primer из которой я хочу скачать файл 123.rar выглядит так:
1.php
cdownload.inc.php
123.rar (файл который надо скачать)
skachat.php
stats/anonymous (папка статистики)


<? //файл skachat.php ?>
 <a href="http://localhost/primer/1.php?download=123.rar">Скачать1</a><br> 
 <a href="http://localhost/primer/1.php?download=http://localhost/primer/123.rar">Скачать2</a>

---------------------------------------------------------------------------------------------------------------------------------

<?
// файл 1.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();
?>

---------------------------------------------------------------------------------------------------------------------------------

<?php
// файл 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
}
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования