Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> побайтовый подсчет трафика при скачивании 
:(
    Опции темы
chiffa
Дата 26.7.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Добрый день. необходимо на ПХП релизовать следующие, пользователь скачивает файл, скрипт должен при оттаче записывать сколько трафика ушло, тоесть к примеру если размер файла 300 метров, а обрыв связи произошел при скачивании 250 засчитатся должно что пользователь скачал 250 метров, а не 300. Есть у кого идеи как это реализовать?
PM MAIL   Вверх
WolfON
Дата 26.7.2007, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 1
Всего: 8



скрипт читает файл и отдает блоками. на том на котором остановился - записывает в базу
PM MAIL ICQ   Вверх
chiffa
Дата 26.7.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



хм... а как это можно програмно сделать не подскажешь?
PM MAIL   Вверх
Diesel Draft
Дата 26.7.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



connection_aborted().  - Возвращает TRUE, если клиент отсоединён


Просто в цикле выводишь и проверяешь если соединение если ли обрыв.


А зачем тебе. Хочешь сделать докачку или трафик тарафикуеш трафик?


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
chiffa
Дата 26.7.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



тарификую smile
Цитата(Diesel Draft @  26.7.2007,  12:15 Найти цитируемый пост)
Просто в цикле выводишь


Всмысле?....

З.Ы. ПОдпись у тебя улет!  smile 

Это сообщение отредактировал(а) chiffa - 26.7.2007, 12:46
PM MAIL   Вверх
jinn
Дата 26.7.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



chiffa т.е делишь файл на блоки например по 1024 байт и теперь при скачаивании оцередного блока проверяешь с помощью connection_aborted() разорвалось ли соединение если оно разорвалось то записываешь текущее кол-во переданных блоков*кол-во байт одного блока или сразу кол-во переданных байт(как цикл реализуешь смотря)
PM MAIL   Вверх
chiffa
Дата 26.7.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



тоесть считал 1024 байт  майта - отдал, еще 1024 отдал. так?
PM MAIL   Вверх
Mal Hack
Дата 26.7.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Проще поставить утилиту на сервер специальную и с нее читать данные.
Второй вариант netstat'ом смотреть информацию по соединению.

Если вы будете разбивать 300 метровый файл на части и отдавать его пользователю, даю 100% вероятности того, что он его не получит.
PM ICQ   Вверх
chiffa
Дата 26.7.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



а какую утилиту и что за netstat?
PM MAIL   Вверх
Mal Hack
Дата 26.7.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



netstat - утилита под линукс.
PM ICQ   Вверх
Diesel Draft
Дата 26.7.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Цитата(chiffa @ 26.7.2007,  12:45)
тоесть считал 1024 байт  майта - отдал, еще 1024 отдал. так?

Да, именно. Это немного тормозит потому что много лишних операций, но работает на все 100%.

Цитата(chiffa @ 26.7.2007,  12:45)

З.Ы. ПОдпись у тебя улет!   

Спасибо 

Это сообщение отредактировал(а) Diesel Draft - 26.7.2007, 17:39


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
jinn
Дата 26.7.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Mal Hack не прав а если надо под виндой данное организовать???имхо бред конечно но все таки)
ну 1024 байт я грубо сказал можно больше правда немного будет подтормаживать но в этом ты будешь уверен!!это будет твое и не нужно будет юзать сторонние разработки что несомненный +.
PM MAIL   Вверх
Diesel Draft
Дата 26.7.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Еще один плюс в том что его можно юзать на всех хостингах. Ах да, не забудь отключить лимит времени


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 26.7.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



jinn, простите, в чем я не прав?
Вариант что у вс виндовый сервер не рассматривается, т.к. это ваши проблемы и ваша головная боль.

Вы себе не представляете на сколько это "немного" буде большим и как это будет грузить сервер... Вывод (читайте отправка файла пользователю) надо делать 1 раз.
PM ICQ   Вверх
Diesel Draft
Дата 26.7.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



нагрузка снижается за счет больших кусков


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 26.7.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Отдать фал разом будет во многораз быстрее чем отдавать его по частям...
И не спорь... Это - факт.

Это сообщение отредактировал(а) Mal Hack - 26.7.2007, 18:23
PM ICQ   Вверх
Diesel Draft
Дата 26.7.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



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


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Mal Hack
Дата 26.7.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Фишка в том, что нельзя рассматривать вопрос без конкретизации задачи. Естественно, задачи 100% для всех не будет, тем не менее, рассматривать задачу на виндовом хостинге не целесобразно. Это равносильно тому, что ты хочешь купить себе машину, денег в лучшем случае на поддержанный жигуль, а изучаешь каталоги БМВ... Смысл такой же, только мотивация другая.

Решаем способом использования линуксовой утилиты. Уж какие они есть - это я не знаток. netstat вроде бы дает эти данные.

Чей сервер? Какой хостинг?
PM ICQ   Вверх
chiffa
Дата 26.7.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Сорри, что ввел в заблуждение, нуна было сразу оговорить эти моменты. И так. Имеем выделеный сервак, на борту ФриБСД, конфигурация: AMD Sempron 3200+, РАМа 1024. Как вариант мона установить и доп софт, но по netstat к сожалению ничего в сети не нашел есть аналоги под Винду и не более.


Если же отдавать файл частями? Каким образом? Просто загнать в цикл и считывать через fgetc последовательно байты?
PM MAIL   Вверх
Mal Hack
Дата 26.7.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Вариант - пишем демона на Си, который "слушает"80 порт и скидывает инфу в файло. Все. Таким образом знает. Главное правильно организовать структуру этого самого файло, чтобы можно было потом скриптом понять что и как.
Я бы еще копнул в сторону Apache, сдается мне, что там что-то должно нам помочь.

А вообще, было бы интересно услышать полостью задачу.
PM ICQ   Вверх
chiffa
Дата 26.7.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Хм... жаль что Си незнаю на таком уровне smile А здача в следующим, что пользователю выделяется приблизительно 8 гиг трафика на месяц, все что свыше - платно. если фиксить перед началом скачивания весь файл как будто он скачен, то тогда в случаи обрыва на трафик попадает пользователь, если фиксить после скачивания, то на трафик попадаю я smile
PM MAIL   Вверх
Diesel Draft
Дата 26.7.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Поставь ФТП сервер. Есть один, от правда не помню как называется, но он умеет работать з Мускулом и кажется даже з РНР. Может в нем есть что то для этого. Попробуй в цикле, но большими кусками


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
jinn
Дата 27.7.2007, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



хм насчет Си данная фича присутствует в 3proxy (www.security.nnov.ru) если есть желание можно покапаться в исходниках или заюзать его)

Mal Hack читай первый пост там на писано на ПХП я предполагаю что без сторонних утилит.
А нагрузка будет не слишком большой никто не говорит считать каждый байт если будет превышение из 8 гиг на 50 мег это ничего! т.е можно отдавать кусками по 50-100 мег. А подумай саму идею писать на пхп такую утилиту я смысла не вижу. А ты говоришь про скорость обработки на конкретный вопрос конкретный ответ:цикл с большими кусками под 50-100 мег!

PM MAIL   Вверх
chiffa
Дата 27.7.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



тоесть  я циклом стичываю в переменную побайтово. Как накопилось одтал через заголовок. опять, считал - отдал и т.д. так? Вопрос: оно не будет виснуть тот период пока будет "накапливаться"  в переменной эти самые 50-100 мб?
PM MAIL   Вверх
Diesel Draft
Дата 27.7.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Зачем в переменную, можно просто отдавать. 

Код

  set_time_limit(0);
  
  $f = fopen($fileName, 'r');
  while(feof($f)){
    print fread($f, $length);
    if(!connection_aborted()){
        $counter += $length;
    }
  }


Вот набросал на коленях

П.С. только что исправил ошибку

Это сообщение отредактировал(а) Diesel Draft - 27.7.2007, 11:23


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
jinn
Дата 27.7.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



код который привел  Diesel Draft будет работать довольно быстро)только там нужно будет вставить проверку на лимит трафика)

Это сообщение отредактировал(а) jinn - 27.7.2007, 11:24
PM MAIL   Вверх
Diesel Draft
Дата 27.7.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



А, я ошибку нашли smile у Меня там когда коннект обрывается то оно начнет считать. Должно быть на оборот smile


ну думаю пример ясен


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
jinn
Дата 27.7.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



там должно быть примерно так:
Код

 set_time_limit(0);    
    
  $f = fopen($fileName, 'r');    
  while(feof($f))
  {
    if($counter<$max)
    {
       print fread($f, $length);
       $counter += $length;
       if(!connection_aborted())
       {
        //записываем скоольк передано
       }
    }
    else
    {
      fclose($f);
    }
  }


Это сообщение отредактировал(а) jinn - 27.7.2007, 11:33
PM MAIL   Вверх
Diesel Draft
Дата 27.7.2007, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



jinn, тоже на коленях писал ?  smile 


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
chiffa
Дата 27.7.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



а как лучьше отдавать? так?

Код

header("Content-type: application/octet-stream");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=". $name_out);
header("Content-Length: " . FileSize($neww)); 

ReadFile($neww);


PM MAIL   Вверх
chiffa
Дата 27.7.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



блин.... не получается.... если не трудно готовый пример мона....
PM MAIL   Вверх
Diesel Draft
Дата 30.7.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



А что именно не получается.


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
chiffa
Дата 10.8.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



привет. вообще отдавать не хочет... при попытке скачивания - белый экран и все...
PM MAIL   Вверх
Diesel Draft
Дата 10.8.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



А дебаггером бегал?


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
chiffa
Дата 10.8.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



возможно я отстал от жизни. а название дебаггера мона?
PM MAIL   Вверх
Diesel Draft
Дата 10.8.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Теперь почти все редакторы имеют дебагер.
Рекомендую Zend Studo и PHPeD . Оба платных, но можно схитрить   smile 


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
jinn
Дата 15.9.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



chiffa, решил проблему то?
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1952 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.