views:

241

answers:

2

Is it possible in PHP to get a count of the number of bytes transmitted to the client? For example, if I'm outputting a 10 MB file, is there a way to find out if all 10 MB were sent to the client, or to see if the client interrupted the transfer partway? I know Apache will log this afterwards, but I'd like to access the data in PHP.

+6  A: 

Take a look at the ignore_user_abort and connection_abort function.

Gumbo
+5  A: 

Here's what I ended up doing (thanks Gumbo):

ignore_user_abort(true);

$handle = fopen($file_path, 'r');
while ( ! feof($handle)) {
    echo fread($handle, 4096);
    if (connection_aborted()) {
     $transfer_success = false;
     $bytes_transferred = ftell($handle);
     break;
    }
}
fclose($handle);
Jay