К списку форумов К списку вопросов
Подтверждение.. получения..
OF
08.04.2004 - 11:46
Имеем PHP. Необходимо следующее: из скрипта клиентская программа получает некие данные. После этого на сервере необходимо енти данные удалить. Но только если клиент, ессесно, _полностью_ получил эти данные. Насколько я знаю выходной поток в PHP буферизуется, а после завершения скрипта отправляется веб-сервером клиенту. Вот как бы убедиться, что все клиентом получено? Может есть в PHP какие-нить механизмы для этого? Спасибо за внимание..
buster
1 - 08.04.2004 - 11:53
Пусть клиент отправляет сигнал, что он получил данные... можно в конце пакета данных передавать контрольную сумму, которую клиент должен сообщить серверу для определния, что именно все данные им получены. А уж после этого скрипт пусть удаляет всё на сервере.
OF
2 - 08.04.2004 - 12:26
(1) Да, это первое, что приходит в голову.. НО! Представь такую ситуацию: клиент отправил запрос на удаление, но он не дошел до сервера, данные не удалились, и клиент в следующий раз скачает опять то же самое. Другой вариант: клиент должен подождать ответа, что данные удалились; данные удалилсь, ответ пошел... но не дошел (допустим, связь оборвалась) и опять получается, что "скрипт не может быть уверенным", что клиент получил подтверждение удаления.. А клиент не получил и подумал, что ничего не удалилось.. Кароче, замкнутый круг.. :(
AI
3 - 08.04.2004 - 12:35
можно полюбопытствовать = где это ты такую фишку используешь?
OF
4 - 08.04.2004 - 12:45
Можно.. но долго объяснять. Предвидя ответы определенного типа говорю сразу: надо сделать именно так..
В тему: Думаю, надо как-то отключить буферизацию.. Я полазил по хелпу, нашел такую настройку как output_buffering, отключил, но все равно скрипт завершается гораздо раньше, чем докачиваются данные..
Bulbazavr
5 - 08.04.2004 - 12:58
http://ru.php.net/manual/ru/function.flush.php
OF
6 - 08.04.2004 - 13:28
(5) не получается так... :( я уже пробовал
buster
7 - 08.04.2004 - 14:17
А зачем ему надо дожидаться завершения докачки? Пусть у тебя другой получает сигнал об окончании докачки и удаляет данные. Удалил - вернул ответ, что удалил. И всё. Не надо больше ничего.
OF
8 - 08.04.2004 - 14:27
(7) почитай пост номер 2..
Хорошо, упростим задачу. Имеется страничка, которую надо показать в браузере пользователя только один раз. Вот так: заходим, смотрим страничку.. Второй раз - вы уже смотрели, досвиданья.. (Опустим проблему идентификации, допустим, что механиз сессий уже реализован...). Здесь надо учитывать, что страничка могла недогрузиться по объективным причинам. Т.е. второй раз ее не показывать только если пользователь ее полностью просмотрел (читай - загрузил полностью). Как ТАКОЕ реализовать?
Zeratul
9 - 08.04.2004 - 14:29
ну... есть один корявый способ. В конце страницы
<img src="http://www.example.com/flag.php" width=1 height=1 border=0>
запускается скрипт, колторый говорит что код прогрузился.
OF
10 - 08.04.2004 - 14:31
(5) Several servers, especially on Win32, will still buffer the output from your script until it terminates before transmitting the results to the browser.
ИМХО, в принципе, задача не такая уж и синтетическая... Вполне реальная.. Например для РЕАЛЬНОГО счетчика количества чтений статьи.. А не так, что если запрос послал, то значит прочитал...
OF
11 - 08.04.2004 - 14:34
(9) опять тоже самое получается - все могло подгрузиться, но скрипт, указанный в конце страницы может и не выполниться. Это тоже самое, что и посылка запроса после получения..
OF
12 - 08.04.2004 - 14:53
Короче, я понял где собака порылась.. Просто все эти flush и прочее не работают под Виндами. А так - это самый реальный и действенный способ.. Вот.. Хоть Линух ставь на WMWare.. :)
Zeratul
13 - 08.04.2004 - 15:08
не понял - что делать будешь?
OF
14 - 08.04.2004 - 15:09
Да что делать.. Делать нечего.. :(
buster
15 - 08.04.2004 - 15:42
Изголяться можно сколько угодно. Хотя главное - чтобы на практике работало.
Mips
16 - 08.04.2004 - 21:54
#9, если картинки отключены (такое часто бывает), то твой вариант не прокатит ;)
Если отключен яваскрипт, то непрокатит и onload="...".
В ифрейме сделать отправку подтвержнения тоже не вариант, не везде пашет.
Сессии тоже не выход, т.к. страница может недогрузиться.
Остаётся только повесить в конце текста кнопку "я прочёл это".
OF
17 - 09.04.2004 - 09:28
(16) :)
Ладно, спасибо всем, я уже разобрался..

К списку вопросов на форуме Веб-дизайн

>>