![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
Добрый день. необходимо на ПХП релизовать следующие, пользователь скачивает файл, скрипт должен при оттаче записывать сколько трафика ушло, тоесть к примеру если размер файла 300 метров, а обрыв связи произошел при скачивании 250 засчитатся должно что пользователь скачал 250 метров, а не 300. Есть у кого идеи как это реализовать?
|
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 1 Всего: 8 |
скрипт читает файл и отдает блоками. на том на котором остановился - записывает в базу
|
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
хм... а как это можно програмно сделать не подскажешь?
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
connection_aborted(). - Возвращает TRUE, если клиент отсоединён
Просто в цикле выводишь и проверяешь если соединение если ли обрыв. А зачем тебе. Хочешь сделать докачку или трафик тарафикуеш трафик? |
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
||||
|
||||
jinn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
chiffa т.е делишь файл на блоки например по 1024 байт и теперь при скачаивании оцередного блока проверяешь с помощью connection_aborted() разорвалось ли соединение если оно разорвалось то записываешь текущее кол-во переданных блоков*кол-во байт одного блока или сразу кол-во переданных байт(как цикл реализуешь смотря)
|
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
тоесть считал 1024 байт майта - отдал, еще 1024 отдал. так?
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Проще поставить утилиту на сервер специальную и с нее читать данные.
Второй вариант netstat'ом смотреть информацию по соединению. Если вы будете разбивать 300 метровый файл на части и отдавать его пользователю, даю 100% вероятности того, что он его не получит. |
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
а какую утилиту и что за netstat?
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
netstat - утилита под линукс.
|
|||
|
||||
Diesel Draft |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Да, именно. Это немного тормозит потому что много лишних операций, но работает на все 100%.
Спасибо Это сообщение отредактировал(а) Diesel Draft - 26.7.2007, 17:39 |
||||
|
|||||
jinn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Mal Hack не прав а если надо под виндой данное организовать???имхо бред конечно но все таки)
ну 1024 байт я грубо сказал можно больше правда немного будет подтормаживать но в этом ты будешь уверен!!это будет твое и не нужно будет юзать сторонние разработки что несомненный +. |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Еще один плюс в том что его можно юзать на всех хостингах. Ах да, не забудь отключить лимит времени
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
jinn, простите, в чем я не прав?
Вариант что у вс виндовый сервер не рассматривается, т.к. это ваши проблемы и ваша головная боль. Вы себе не представляете на сколько это "немного" буде большим и как это будет грузить сервер... Вывод (читайте отправка файла пользователю) надо делать 1 раз. |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
нагрузка снижается за счет больших кусков
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Отдать фал разом будет во многораз быстрее чем отдавать его по частям...
И не спорь... Это - факт. Это сообщение отредактировал(а) Mal Hack - 26.7.2007, 18:23 |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Я не спорю, ну просто ты ставишь задачу в тупик. Как по твоему можно сейчас это решить?Да можно поискать утилиту под винду. Кстати это твой сервер или просто виртуальный хостинг
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Фишка в том, что нельзя рассматривать вопрос без конкретизации задачи. Естественно, задачи 100% для всех не будет, тем не менее, рассматривать задачу на виндовом хостинге не целесобразно. Это равносильно тому, что ты хочешь купить себе машину, денег в лучшем случае на поддержанный жигуль, а изучаешь каталоги БМВ... Смысл такой же, только мотивация другая.
Решаем способом использования линуксовой утилиты. Уж какие они есть - это я не знаток. netstat вроде бы дает эти данные. Чей сервер? Какой хостинг? |
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
Сорри, что ввел в заблуждение, нуна было сразу оговорить эти моменты. И так. Имеем выделеный сервак, на борту ФриБСД, конфигурация: AMD Sempron 3200+, РАМа 1024. Как вариант мона установить и доп софт, но по netstat к сожалению ничего в сети не нашел есть аналоги под Винду и не более.
Если же отдавать файл частями? Каким образом? Просто загнать в цикл и считывать через fgetc последовательно байты? |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Вариант - пишем демона на Си, который "слушает"80 порт и скидывает инфу в файло. Все. Таким образом знает. Главное правильно организовать структуру этого самого файло, чтобы можно было потом скриптом понять что и как.
Я бы еще копнул в сторону Apache, сдается мне, что там что-то должно нам помочь. А вообще, было бы интересно услышать полостью задачу. |
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
Хм... жаль что Си незнаю на таком уровне
![]() ![]() |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Поставь ФТП сервер. Есть один, от правда не помню как называется, но он умеет работать з Мускулом и кажется даже з РНР. Может в нем есть что то для этого. Попробуй в цикле, но большими кусками
|
|||
|
||||
jinn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
хм насчет Си данная фича присутствует в 3proxy (www.security.nnov.ru) если есть желание можно покапаться в исходниках или заюзать его)
Mal Hack читай первый пост там на писано на ПХП я предполагаю что без сторонних утилит. А нагрузка будет не слишком большой никто не говорит считать каждый байт если будет превышение из 8 гиг на 50 мег это ничего! т.е можно отдавать кусками по 50-100 мег. А подумай саму идею писать на пхп такую утилиту я смысла не вижу. А ты говоришь про скорость обработки на конкретный вопрос конкретный ответ:цикл с большими кусками под 50-100 мег! |
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
тоесть я циклом стичываю в переменную побайтово. Как накопилось одтал через заголовок. опять, считал - отдал и т.д. так? Вопрос: оно не будет виснуть тот период пока будет "накапливаться" в переменной эти самые 50-100 мб?
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Зачем в переменную, можно просто отдавать.
Вот набросал на коленях П.С. только что исправил ошибку Это сообщение отредактировал(а) Diesel Draft - 27.7.2007, 11:23 |
|||
|
||||
jinn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
код который привел Diesel Draft будет работать довольно быстро)только там нужно будет вставить проверку на лимит трафика)
Это сообщение отредактировал(а) jinn - 27.7.2007, 11:24 |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
А, я ошибку нашли
![]() ![]() ну думаю пример ясен |
|||
|
||||
jinn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
там должно быть примерно так:
Это сообщение отредактировал(а) jinn - 27.7.2007, 11:33 |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
jinn, тоже на коленях писал ?
![]() |
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
а как лучьше отдавать? так?
|
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
блин.... не получается.... если не трудно готовый пример мона....
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
А что именно не получается.
|
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
привет. вообще отдавать не хочет... при попытке скачивания - белый экран и все...
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
А дебаггером бегал?
|
|||
|
||||
chiffa |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 734 Регистрация: 11.11.2003 Репутация: нет Всего: -1 |
возможно я отстал от жизни. а название дебаггера мона?
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Теперь почти все редакторы имеют дебагер.
Рекомендую Zend Studo и PHPeD . Оба платных, но можно схитрить ![]() |
|||
|
||||
jinn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
chiffa, решил проблему то?
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |