Как бы проверить, что PDF файл скачен (+)

tche

Новичок
Как бы проверить, что PDF файл скачен (+)

СИТУАЦИЯ:
имеем электронный журнал, авторизованные (по IP) пользователи имеют право скачать PDF статей. Каждый факт скачавания статьи региструется в БД в специальной таблице (userID, fileID, time). Потом по этой таблице считается статистика скаченных PDF разными пользователями.

ПРОБЛЕМА:
запись заносится в таблицу в момент нажатия Download (скрипт проверяет IP, заносит запись в таблицу и выдает PDF). Дальше судьба файла неизвестна, если по причине хренового коннекта и чего еще файл не был скачен, все равно он регистрируется как скаченный, более того, если юзер 2 раза нажал Download, то запись заносится дважды (трижды ...), то есть статистика неверная получается.

ВОПРОС
Как убедиться, что файл дошел полностью до компьютера пользователя и только потом заносить запись в таблицу логов?
При этом допускается минимум наворотов, то есть чтобы работало под все популярные броузеры.

Спасибо,
Ч.
 

trent

Developer
только смотреть, какой размер забрал пользователь по логам apach'a и сравнивать с реальным размером... если размеры совпадают, то пользователь забрал весь файл...
 

tche

Новичок
Хмм, то есть парсер логов сделать (+)

для заполнения БД, а не на лету заполнять. Это идея.
Парсер запускать раз в сутки. Здесь только одно большое НО, придется настроить access_log так, чтобы он IP записывал, а не domain name, это конечно лучше с точки зрения скорости, но не так наглядно.

А вот тогда вопрос по апачу, нельзя ли организовать отдельный апачевский лог только для файлов типа PDF, я так не умею.

Спасибо,
Ч.
 

Verder

Guest
Встречный вопрос.
Как ты собираешься в случае обрыва связи проидентифицировать одного и того же пользователя используя только IP?
 

Crazy

Developer
Задача относится к вещам, которые невозможно корректно сделать просто потому, что хотеть этого не нужно. :)

Здесь собственно, налицо подмена задачи. Нужно решать не проблему "как определить, что файл докачан" (а если докачан, но не созхранен?). Нужно решать ту проблему, которая породила задачу "как определить, что файл докачан". Ибо решать ее наверняка нужно совсем иначе.
 

tche

Новичок
Автор оригинала: Verder
Встречный вопрос.
Как ты собираешься в случае обрыва связи проидентифицировать одного и того же пользователя используя только IP?
Здесь все очевидно (или я не понял вопрос)
Все возможные IP, по которым есть доступ к полным текстам, хранятся в базе, никаких паролей юзернеймов нет. Если пользователь скачал файл, значит его IP точно есть в базе, значит IP из access_log можно соотнести с userID.

Если будет обрыв связи, то запись в access_log или совсем не появится, или появится, но не с тем размером скаченного файла, тогда эти записи будут просто игнорироваться.
 

tche

Новичок
Автор оригинала: Crazy
Задача относится к вещам, которые невозможно корректно сделать просто потому, что хотеть этого не нужно. :)
Хотеть может и не нужно, а вот сделать нужно. Ситуация, следующая: каждый файл денег стоит, и потом предъявлять счет за недокаченный или вообще нескачанный файл, как бы так, не очень хорошо. А проблему не я сам придумал, сначала все просто казалось, нажал Download - получил файл, а не тут то было.


Нужно решать не проблему "как определить, что файл докачан" (а если докачан, но не созхранен?).
Если докачен, то уже не наши проблемы, что с ним дальше. Люди нормальные идут в библиотеку не пиво пить, а читать, и если уж книгу взяли, то как минимум ее откроют.

Нужно решать ту проблему, которая породила задачу "как определить, что файл докачан". Ибо решать ее наверняка нужно совсем иначе.
Ну я вроде ситауцию полностью описал, теперь прошу совета.

Спасибо,
Ч.
 

Crazy

Developer
Автор оригинала: tche

Хотеть может и не нужно, а вот сделать нужно. Ситуация, следующая: каждый файл денег стоит, и потом предъявлять счет за недокаченный или вообще нескачанный файл, как бы так, не очень хорошо. А проблему не я сам придумал, сначала все просто казалось, нажал Download - получил файл, а не тут то было.
О! Вот мы и получили РЕАЛЬНУЮ проблему: нехорошо брать лишние деньги. Как ты уже сказал в поскипанном фрагменте, люди к вам ходят не пиво пить. Если файл качать начал -- когда-нибудь все равно докачает. Соответственно, решение простое: брать деньги за первую попытку скачать файл. Это совершенно легко отслеживается и не будет вызывать проблем со стороны пользователей (типа "а на самом деле мы этот файл не докачали -- у нас псоледний байт не принялся")...
 

tche

Новичок
Автор оригинала: Crazy
Соответственно, решение простое: брать деньги за первую попытку скачать файл. Это совершенно легко отслеживается и не будет вызывать проблем со стороны пользователей (типа "а на самом деле мы этот файл не докачали -- у нас псоледний байт не принялся")...
Да, это решение, но скорее политическое, а не техническое, и должно быть утверждено начальством. Хотя подход мне понравился.

Спасибо
Ч.
 

Crazy

Developer
Абсолютно верно. Вообще, самые кошмарные -- в техническом плане -- задачи рождаются из неточного бизнес-анализа... :)
 
Сверху