Abgebrochenen Download ausfindig machen...

Sebigf

Erfahrenes Mitglied
Hallo zusammen !

Ich habe eine Downloadbase gecodet, bei der auch der Traffic errechnet werden soll. (Downloads * Size = Traffic)

Soweit geht das auch ohne Probleme, aber kann ich das auch so umsetzen, dass bei Abbruch eines Downloads dies berücksichtigt wird ? Weil wenn ein Besucher den Download abbricht nach 2 Sek und die Datei 500MB groß ist, macht das ja einen gewaltigen Unterschied in einer Statistik :)

Danke !
 
Also mit php geht ich meineswissens nicht.
php gibt nur den Befehl: Starte Download und dann macht php nix mehr.
Vllt. geht da was mit Ajax?

Tobee
 
Ich hab grad mal ein wenig rumgespielt und sowas in meinem Downloadscript eingebaut.
Dabei halte ich in einem Log-File fest wie viele Bytes uebertragen wurden. Das ganze laesst sich natuerlich auch mit einer Datenbank machen.

Ich glaub mit dem Script muss ich mich mal noch was mehr beschaeftigen, vielleicht kann man da was interessantes draus stricken. :D

Hier mal der Code:
PHP:
<?php
$filename='FreeBSD-6.0-BootOnly.iso';
$kbs=250;
if ((file_exists($filename)) && (is_readable($filename)))
	{
		$dlfile=fopen($filename,'r');
	}
else
	{
		die('Cannot open file');
	}
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Length: '.filesize($filename));
$sentbytes=0;
$logfile=fopen($filename.'.dl-'.time().'.log','a');
while (!feof($dlfile))
	{
		$bytes=1024;
		if ($kbs>0)
			{
				$bytes*=$kbs;
			}
		echo fread($dlfile,$bytes);
		flush();
		$sentbytes+=$bytes;
		ftruncate($logfile,0);
		fwrite($logfile,$filename.' '.filesize($filename)." Bytes\n");
		if ($sentbytes<filesize($filename))
			{
				fwrite($logfile,$sentbytes);
			}
		else
			{
				fwrite($logfile,'complete');
			}
		fwrite($logfile,"\n");
		if ((!feof($dlfile)) && ($kbs>0))
			{
				sleep(1);
			}
	}
fclose($logfile);
fclose($dlfile);
?>
Neu sind hierbei die Zeilen 15,16,26-37 und 43.
Da das ganze jetzt erstmal nur als Test gedacht war hab ich auch noch keinen doppelten Boden eingebaut fuer den Fall, dass das Logfile nicht geschrieben werden kann. In einem Produktivscript sollte dies also noch nachgeholt werden.
 
Wieso wertest du nicht die Log-Dateien des Webservers aus? Dort steht exakt wie viel bei jeder Serverantwort übertragen wurde.
 
Zurück