views:

938

answers:

4

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-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Length: ' . filesize($file));
  header('Content-Disposition: attachment; filename=' . basename($file));
  readfile($file);
A: 

You can download a file with many diffrent clients, some of them for sure don't support any client-side tricks.

How you "handle" those requests for file downloads? Files are streamed to user? Or you simply give them a redirect to the file URL?

kender
+4  A: 

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.

Treb
+3  A: 

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.

Wimmer
A: 

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.