Отдача контента пользователю.

cDLEON

Онанист РНРСlub
Отдача контента пользователю.

Недавно задался вопросом...
А можно ли как-нибудь отслеживать успел поступить контент пользователю ?
Подобно ф-и socket_write, т.е. дождаться получения контента пользователем, и только после этого отправлять следующую порцию ?
Кто-нибудь рылся в этом направлении ?
 

Апокалипсис

тех дир matras.ru
Всмысле успел поступить?
Ставь флаги в сценарии если срабатывают - можно считать что контент отдан - отдавай след. контент.
 

cDLEON

Онанист РНРСlub
Апокалипсис
Можно считать, но не считаю. Потому как забивается оперативная память. При чём забивается апачевый процесс, а не ПХП-шный, дочерний. Что ещё больше затрудняет всё это дело....Нельзя использывать ф-и для работы с ПХП-шной памятью....
 

cDLEON

Онанист РНРСlub
Апокалипсис
Всё это конечно хорошо...Я даже такую же фигню для апача придумал, кроссплатформенную....Но есть одна проблема...
Нельзя контралировать саму отдачу файла, ну и естественно нельзя узнать закончилась ли передача....
 

OZ

Новичок
cDLEON, можно. Есть для этого readfile да и print может двоичные строки выводить - читай по 1024 бита файл и выводи - тогда памяти точнохватит. unset используй для верности. Но и тогда ты узнаешь, отдался ли контент, но не будешь знать, принят ли он уже пользователем.
 

cDLEON

Онанист РНРСlub
OZ
Жжошь.....Ты попробуй читать по 1024 байта файл в несколько гигов, предположим в 2-ва гига. Но не с локальной машины, а с удалённого сервера. Желательно на *никсе. И засеки время через сколько апач упадёт.
 

OZ

Новичок
cDLEON, ты где-то в этой теме писал про несколько гигабайт? Если ты отдаёшь такие файлв по http вместо ftp, да ещё и придумываешь, как это покрасивее сделать - то это ты "жжошь", умник. Если тебе не нужны советы - нафиг ты тему здесь создавал?
 

cDLEON

Онанист РНРСlub
OZ
Мне нужны советы. Только вот совет как пользоваться принтом и читать файлы здесь явно неуместен...
---
Немного эксперементов и я с удивлением узнал, что на моём локальном веб-сервере всё это дело работает прикольно (Виста + Апач 1.3 + ПХП 5.2), скрипт делает несколько заходов ( echo fread...), достигая размера неотправленных данных в 30-40кб, начинает нагло ждать пока эту порцию "съедят". Кажется то, что мне и нужно было... Но вот как я только начал тестить это на никсах, всё пошло кувырком, т.е. скрипт отдавал сразу всё и ни чего не ждал =(
Может быть эта опция конфигурации ПХП ? Если да, то какая?
 

tashkentchi

Новичок
Отдавай клиенту метр. Если он поддерживает докачку (а без этого он гигабайт никак не выкачает), то попросит еще. Отдашь следующий метр и т.д.
 

dark-demon

d(^-^)b
cDLEON, а конфигурация никсов какая? очевидно данные складируются где-то между твоим скриптом и клиентом. какие-нибудь прокси?
 

cDLEON

Онанист РНРСlub
tashkentchi
Каким мокаром научить клиент (любой, даже браузер) научить просить ещё?
dark-demon
Да вроде бы обычная.... Веб сервер апач а сверху вроде бы ни чего и нету (
 

tashkentchi

Новичок
Каким мокаром научить клиент (любой, даже браузер) научить просить ещё?
Не любой (любой бессмыслено), а только те, которые поддерживают докачку.
PHP:
header('Content-Range: bytes ' . from . '-' . $to . '/' . $fsize);
-~{}~ 30.04.07 15:35:

Помимо прочего разумеется:
PHP:
header($_SERVER['SERVER_PROTOCOL'] . ' 206 Partial Content');
 

cDLEON

Онанист РНРСlub
tashkentchi
Это я знаю.
И чё после каждого отданного метра делать дисконнект?
 

tashkentchi

Новичок
А чего его делать? Он сам сделается. Можно и не после метра. Сам подбери величину, при которой у тебя сервер не падает.
 

cDLEON

Онанист РНРСlub
tashkentchi
Помоему не выход...
Костыль...Не прочный костыль...Протокол ТСР больше времени расходует на коннект, и меньше на передачу
 

tashkentchi

Новичок
А можно ли как-нибудь отслеживать успел поступить контент пользователю ?
Чего просил... Других решений на уровней пхп не вижу. Этот костыль бережет твой сервер, а значит, - бесперебойное обслуживание клиентов. Попробуй cкачать гиг FlashGet-ом и посмотри сколько "попыток" ему для этого понадобится. Но юзера это не напрягает. Зато напрягает ненайденный сервер.
 

cDLEON

Онанист РНРСlub
tashkentchi
Фишка ф чОм....Фишка в том, что я сам тестил у себя на локальном сервере. Он поступает "по умному"...Пока не отдаст выделенные и затусуренные в память 30 мб - больше не читает из файла. Спецом сделал ещё один файл и считал количество чтений при отдаче. На других, линуксовых серверах, работало по-другому. Т.е. скрипт отдавал ВСЁ содержимое файла и ни у кого не спрашивал...
П.С Если что то не внятно объяснил сори. Пиво зло 8)
 

tashkentchi

Новичок
Я это читал уже. У тебя есть два пути решения проблемы:

1. Перенастроить/поменять сервер. Здесь ничего посоветовать не могу.

2. Переписать скрипт так, чтобы он нормально работал на данном/любом сервере.

Тебе выбирать.
 

cDLEON

Онанист РНРСlub
tashkentchi
Так для того, что бы переписать мне нужно понять саму проблему - это то, почему у меня на локальном, виртуальном сервере всё работает как нужно, а на втором - сервак начинает выбрасывать весь контент в оперативу. Если я это пойму - я уверен, появится множетсва решений данной проблемы.
 
Сверху