Reply to Re: How to detect if file download completed or cancelled

Your name:

Reply:


Posted by petersprc on 10/20/06 01:53

You could check the byte count in the web server log to see if the
whole file was transferred.

In PHP, you could also do this by checking connection_aborted() after
sending the file. For example:

ignore_user_abort(true); // Don't end if the connection breaks

if (readfile($path) !== false && !connection_aborted()) {
// Success!
}

Here's a larger example. The function sendFile returns the status of
the download:

<?

// Sample usage

function sendTest()
{
$res = sendFile('application.exe', 'application/octet-stream');

if ($res['status']) {
// Download succeeded
} else {
// Download failed
}

@saveDownloadStatus($res);
}

// The sendFile function streams the file and checks if the
// connection was aborted.

function sendFile($path, $contentType = 'application/octet-stream')
{
ignore_user_abort(true);

header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="' .
basename($path) . "\";");
header("Content-Type: $contentType");

$res = array(
'status' => false,
'errors' => array(),
'readfileStatus' => null,
'aborted' => false
);

$res['readfileStatus'] = readfile($path);
if ($res['readfileStatus'] === false) {
$res['errors'][] = 'readfile failed.';
$res['status'] = false;
}

if (connection_aborted()) {
$res['errors'][] = 'Connection aborted.';
$res['aborted'] = true;
$res['status'] = false;
}

return $res;
}

// Save the status of the download to some place

function saveDownloadStatus($res)
{
$ok = false;
$fh = fopen('download-status-' . $_SERVER['REMOTE_ADDR'] . '-' .
date('Ymd_His'), 'w');
if ($fh) {
$ok = true;
if (!fwrite($fh, var_export($res, true))) {
$ok = false;
}
if (!fclose($fh)) {
$ok = false;
}
}
return $ok;
}

Dan D wrote:
> I have a large install file (an exe) on my web server that people
> download and install from. Looking at my log files, I see a lot of
> people downloading it, but no way to tell for sure if they completed the
> download or cancelled out before it completed. Is there any function in
> PHP that would allow the web server to send the file and detect a
> completion or cancellation? Or perpahs a javascript/PHP method?
>
> Any help would be greatly appreciated.
> Thanks,
> Dan

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация