How to detect when a user has successfully finished downloading a file in php
I've got a php page which handles requets for file downloads. I need to be able to detect when a file has been downloaded successfully. How can this be done? Perhaps there's some means of detecting this client-side then sending a confirmation down to the server.
Thanks.
Edit: By handle, I mean that the page is doing something like this:
$file = '/var/www/html/file-to-download.xyz';
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename=' . basename($file));
readfile($file);
Solution 1:
Handle the download in a seperate php script (better do a little more than just readfile($file);
, you can also provide the ability to resume downloads like in this question).
Then in this script, when you read the last block and send it, you know that all the file was sent. This is not the same as knowing that all was received, but it should be enough for most scenarios.
Solution 2:
What Treb said, but I should add that you can check if the client is still listening during download with connection_status().
Don't forget to flush()
after you've written data to the client, it helps in detecting if the connection is still up.