Ако скрипт инициализира download, има ли начин скрипта да се разбере дали юзера (от страна на клиента/браузера) е натиснал [OK] и е свалил файла или е натиснал [Cancel/X] и е отказал свалянето?
Имам следното на PHP, което си работи без проблеми.
GeSHi (PHP):
function shutdown(){
{
//code for aborted connection
}
else
{
//code for succesfull download
}
}
header("Content-Type: text/x-delimtext; name=\"$file_name\"");
header("Content-disposition: attachment; filename=$file_name");
..
printf ("-- backup successfully finished at %s --\n", date("j-F-Y H:i:s", time()));
}
проблема е че след последният 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