[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ограничение по скорости
johniek_comp
Вот на депозитах всяких литбитах есть как бы 2 варианта загрузки:
бесплатный
платный

там везде написано что мол если за деньги, будет скачка быстрее...
так вот!
это правда или замануха для ламеров? как они могут ограничить скорость моего интернета?
если можно как-то замедлить загрузку с своего сайта то как?
прошу дать код посмотрю



Спустя 17 минут, 31 секунда (25.07.2011 - 20:52) VELIK505 написал(а):
Конечно правда они на этом зарабатывают. Там просто есть допустим 2 интернет канала.
1 мощный другой бичёвский если ты халявщик тебе по бичёвскому каналу отдают а если нет то по мощному.

Спустя 10 минут, 27 секунд (25.07.2011 - 21:02) ИНСИ написал(а):
johniek_comp также через php можно регулировать скорость отдачи файла. Помню где-то был класс по закачке, если найду скину

Спустя 9 минут, 51 секунда (25.07.2011 - 21:12) Invis1ble написал(а):
INSIDIOUS
Цитата
также через php можно регулировать скорость отдачи файла

любопытно было бы взглянуть

Спустя 19 минут, 25 секунд (25.07.2011 - 21:32) johniek_comp написал(а):
Invis1ble
вот-вот мне говорят что можно через пхп...но КАК?

Спустя 1 час, 15 минут, 25 секунд (25.07.2011 - 22:47) Nikitian написал(а):
Средствами php бред - пока не отдастся файл, пых будет висеть в памяти, а он со всеми модулями не маленький, опять же и через апач вообще может быть подключен пых модулем.
Делал через внутренний редирект Nginx и такой конфиг:

location /files {
root /var/www/site.ru;
if ( $query_string !~* 'premium' ) {
set $limit_rate 10k;
}
internal;
}

Соответственно, если внутренний редирект без "?premium" в конце, то отдаётся со скоростью 10Кбит/с, если есть, то с максимальной скоростью канала сервера.

Спустя 1 минута, 33 секунды (25.07.2011 - 22:49) Invis1ble написал(а):
Nikitian
интересно. А без nginx средствами apache2 возможно ли такое повторить?

Спустя 3 минуты, 6 секунд (25.07.2011 - 22:52) Nikitian написал(а):
Можно через mode_bandwidth/ но не уверен, что там можно как-то разграничивать на разные скорости.
Ну и раздавать статику апачем как-то уже отвык.

Спустя 1 час, 12 минут, 23 секунды (26.07.2011 - 00:04) ИНСИ написал(а):
Цитата
Средствами php бред - пока не отдастся файл

Ранее был с тобой во всем согласен, но в данном случае не совсем :) Нашел я все таки класс:
class download{

var $properties = array(
'old_name' => '',
'new_name' => '',
'type' => '',
'size' => '',
'resume' => '',
'max_speed' => ''
);

var $range = 0;

function download($path, $name = '', $resume = 0, $max_speed = 0){

$name = ($name == '') ? substr(strrchr('/'.$path.'/'),1) : $name;
$name = explode("/", $name);
$name = end ($name);

$file_size = filesize($path);

$this->properties = array(
'old_name' => $path,
'new_name' => $name,
'type'=> "application/force-download",
'size' => $file_size,
'resume' => $resume,
'max_speed' => $max_speed
);

if ($this->properties['resume']) {

if(isset($_SERVER['HTTP_RANGE'])) {

$this->range = $_SERVER['HTTP_RANGE'];
$this->range = str_replace("bytes=", "", $this->range);
$this->range = str_replace("-", "", $this->range);
} else {
$this->range = 0;
}

if ($this->range > $this->properties['size']) $this->range = 0;

} else {

$this->range = 0;
}
}



function download_file(){

if ($this->range) {
header($_SERVER['SERVER_PROTOCOL']." 206 Partial Content");
} else {
header($_SERVER['SERVER_PROTOCOL']." 200 OK");
}

header("Pragma: public");
header("Expires: 0");
header("Cache-Control:");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: ".$this->properties["type"]);
header('Content-Disposition: attachment; filename="'.$this->properties['new_name'].'";');
header("Content-Transfer-Encoding: binary");

if ($this->properties['resume']) header("Accept-Ranges: bytes");
if ($this->range) {
header("Content-Range: bytes {$this->range}-".($this->properties['size']-1)."/".$this->properties['size']);
header("Content-Length: ".($this->properties['size']-$this->range));
} else {
header("Content-Length: ".$this->properties['size']);
}

@ini_set('max_execution_time', 0);
@set_time_limit();

$this->_download($this->properties['old_name'], $this->range);
}

function _download ($filename, $range =0) {

@ob_end_clean();

if (($speed = $this->properties['max_speed']) > 0)
$sleep_time = (8 / $speed) * 1e6;
else
$sleep_time = 0;

$handle = fopen($filename, 'rb');
fseek($handle,$range);

if ($handle === false)
{
return false;
}

while (!feof($handle))
{
print (fread($handle, 1024*8));
ob_flush();
flush();
usleep($sleep_time);
}

fclose($handle);

return true;
}

}

Спустя 7 минут, 12 секунд (26.07.2011 - 00:11) Invis1ble написал(а):
INSIDIOUS
костыльненько smile.gif

Спустя 9 минут, 12 секунд (26.07.2011 - 00:20) ИНСИ написал(а):
Invis1ble smile.gif

Спустя 1 час, 34 минуты, 10 секунд (26.07.2011 - 01:55) Nikitian написал(а):
INSIDIOUS
И с чем же не согласен? В этом примере весь джентльменский набор подводных камней: max_execution_time, set_time_limit() - те самые костыли, которые не факт, что заработают, будучи установленными, а если и заработают, то посмотрите как этот скрипт будет отдавать например фильм... ну или просто какой-нибудь архив на пару сотен метров. Пользовать дождётся - ему-то что, а вот сервер будет тянуть всех пользователей и тянуть доооолго забивая память своими экземплярами. Например у меня 1 апачевский воркрер съедает 10 мегабайт памяти.

Спустя 23 минуты, 40 секунд (26.07.2011 - 02:18) Invis1ble написал(а):
Кстати, еще set_time_limit(); выдаст warning (просто он будет заглушен собакой) smile.gif

Спустя 7 часов, 38 минут, 31 секунда (26.07.2011 - 09:57) bel0m0r написал(а):
Тоже интересуюсь данной темой, нашёл вот

Спустя 1 час, 45 минут, 48 секунд (26.07.2011 - 11:43) ИНСИ написал(а):
Nikitian я согласен, что средствами php делать замедление скачивание - не правильно. Я лишь говорю, что на php можно реализовать такое.


_____________
user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.