Автор Тема: Детектване на успешен даунлоад на файл от скрип  (Прочетена 1167 пъти)

Naka

  • Напреднали
  • *****
  • Публикации: 3402
    • Профил
Ако скрипт инициализира download, има ли начин скрипта да се разбере дали юзера (от страна на клиента/браузера) е натиснал [OK] и е свалил файла или е натиснал [Cancel/X] и е отказал свалянето?

Имам следното на PHP, което си работи без проблеми.
Код
GeSHi (PHP):
  1. function shutdown(){
  2. {
  3. //code for aborted connection
  4. }
  5. else
  6. {
  7. //code for succesfull download
  8. }
  9. }
  10.  
  11.  
  12. header("Pragma: no-cache");
  13. header("Content-Type: text/x-delimtext; name=\"$file_name\"");
  14. header("Content-disposition: attachment; filename=$file_name");
  15.  
  16. print "xxxxxxxxxx";
  17. ..
  18. print "yyyyy";
  19. printf ("-- backup successfully finished at %s --\n", date("j-F-Y H:i:s", time()));
  20. }
  21.  

проблема е че след последният printf и flush() скрипта вече е изпратил всичко и завършва изпълнението си, (което изгрлежда се е буферирало от apache-то и от браузера). И според скрипта Download-а е успешен - но при клиента може все още да стои отворен прозорец за 'Save File' и клиента още не е натиснал нито OK нито Cancel/X.

Ако сега той натисне  Cancel/X ще откаже файла, но според PHP сървера вече всичко си е изпратил и download-a си е успешен.

Има ли начин това да се детектне? Някакъв друг http header? Изобщо възможно ли е това според http протокола?
Това горното работи и детектва отказан download само ако клиента натисне Cancel/X през времето писане на файла. Но в общият случай скрипта завършва много по бързо от реакцията на юзера.
http://bg.php.net/manual/bg/features.connection-handling.php

« Последна редакция: Oct 30, 2009, 13:48 от VladSun »
Активен

Perl - the only language that looks the same before and after encryption.

foxb

  • Напреднали
  • *****
  • Публикации: 175
    • Профил
    • WWW
Проблема ти идва от това, че Firefox започва да сваля файла още преди потребителя да е казал къде.

За да получиш нужната информация може би ще трябва да създадеш джава аплет, който да се грижи за записването и да ти връща статуса.

Naka

  • Напреднали
  • *****
  • Публикации: 3402
    • Профил
Проблема ти идва от това, че Firefox започва да сваля файла още преди потребителя да е казал къде.
Сигурно е това. Откъде се задава Firefox да не се държи по-този начин. Търсих много и нищо не намерих.
Спомням си че много одавна не беше така.

Tова е отвартителна опция от страна на firefox. Заради това сигурно хиляди броячи в инернет за свалени файлове показват с 200% повече сваляния.
Тук намерих подобно полакване: http://forums.mozillazine.org/viewtopic.php?t=372079

За да получиш нужната информация може би ще трябва да създадеш джава аплет, който да се грижи за записването и да ти връща статуса.
Положително няма да правя никакви джави, но какво имаш в предвид? Къде трябва да работи този апплет и как? при извикване на скрипта сървера изпраща на клиента Content-disposition: attachment; filename=xxx и това е.
« Последна редакция: Oct 31, 2009, 01:46 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

foxb

  • Напреднали
  • *****
  • Публикации: 175
    • Профил
    • WWW
Честно казано и аз не знам откъде да се спре това...

Колкото до джавата то е като във вица с лимонадата като противозачатъчно не преди или след а вместо.

т.е. използваш джавата за сваляне а не браузъра.