Download slots ermöglichen nur wie?

Wie ist denn nun das Skript aufgebaut beziehungsweise wo wird die Anzahl der belegten Slots wieder dekrementiert? Denn eigentlich sollte das Skript auch dann weiterlaufen, wenn die Verbindung zum Client abgebrochen wurde.

Ach ja: ist die display_errors-Konfigurationsdirektive eigentlich aktiviert, sodass Fehlermeldungen auch ausgegeben werden?
 
Das ist jetzt meines, dass ich dank deiner Hilfe zusammen schustern konnte:

PHP:
<?php
include("dbconnect.php");

//Config auslesen werden ausgelesen und ausgegeben
$querry = "SELECT maxslot, maxspeed FROM slots";
$stat22 = mysql_query($querry, $DatabasePointer);

while ($stats22 = mysql_fetch_row($stat22)) {
      $maxslot = $stats22[0];
	  $maxspeed = $stats22[1];
}   

//Anzahl slots auslesen
$freeslot = "SELECT `used` FROM `slots`";
$slotss = mysql_query($freeslot, $DatabasePointer);

while ($slotsfree = mysql_fetch_row($slotss)) {
      $slotf = $slotsfree[0];
}  

if ($slotf < $maxslot) //Sollte weniger slots gebraucht sein als maximal dann download
{
//Update der Datenbank, Anzahl der Downloads
$update1 = "UPDATE `stats` SET `downloads` = `downloads` + 1";
$statt2 = mysql_query($update1, $DatabasePointer);
//Update der benutzten slots
$update12 = "UPDATE slots SET `used` = `used` + 1";
$slott22 = mysql_query($update12, $DatabasePointer);
//Verbrauchten Traffic updaten
$SQL = "SELECT `Dateigroesse` FROM `otrkey`";
$querry = mysql_query($SQL, $DatabasePointer);

while ($traffic1 = mysql_fetch_row($querry)) {
      $dateisize = $traffic1[0];
}  
//Update des Traffics
$update1 = "UPDATE `stats` SET `traffic` = `traffic` + '$dateisize'";
$statt2 = mysql_query($update1, $DatabasePointer);


//Speed kontrolle
$speed = $maxspeed; //Max-Speed in kbs

$file="".$_GET['file']."";
$dlfile="hf83jdw8ej3dsd/".$_GET['file']."";
$size=filesize($dlfile);
header("Cache-control: private");
header("Content-Type: application/x-otrkey");
header("Content-Length: ".$size);
header("Content-Disposition: filename=".$file);
flush();
$fd = fopen($dlfile, "r");
while(!feof($fd)) {
echo fread($fd, round($speed*1024));
flush();
sleep(1);
}
 

//Aktuelle slots werden geupdatet
$update122 = "UPDATE `slots` SET `used` = `used` - 1";
$slotakk2 = mysql_query($update122, $DatabasePointer);

fclose ($fd);
echo "Vielen Dank für Ihren Download";
}
else
{
echo '<link rel="stylesheet" type="text/css" href="./css/style.css">';
echo '<div id="now2">Leider sind alle Slots belegt. Bitte später versuchen, oder jetzt schnell versuchen im Download Fenster einen zu erwischen.</div> <br> <br> <center><img src="images/stopschild.gif" width="161" height="200" /><center>'; //Alle slots belegt, dann error
}
mysql_close();
?>
 
Das ist laut phpinfo an. Sonst fällt mir nix mehr dazu ein. Warum deines nicht laufen soll und auch keinen Fehler anzeigt.
 
Dann musst du dich auf die Fehlersuche machen. Verstecke beispielsweise Teile des Codes durch auskommentieren und grenze so den Fehler ein. Du kannst auch Testausgaben machen und so prüfen, bis wohin das Skript fehlerfrei läuft.
 
Ich glaube ich habe den Fehler gefunden. Die Datei wird nämlich über so ausgegeben "/Alle_unter_einem_Dach_06.11.03_05-55_kabel1_30_TVOON_DE.mpg.avi.otrkey". Also ist das "/" störend und somit kann die Datei auch nicht gefunden werden.

1. Als nächstes stehen dann noch Folgende, der slot wird trozdem nicht immer korrekt wieder abgezogen. Also wer abbricht, blockiert den slot ständig.

2. Wie wäre ein guter Ansatz für eine Warteschlange?

3. Kennst du dich mit preg_match aus?

PHP:
@preg_match("/[0-9a-zA-Z_-]{2,}_([0-9]{2}\.[0-9]{2}\.[0-9]{2})_[0-9]{2}\-[0-9]{2}_[0-9a-zA-Z]{2,}_[0-9]{1,}_TVOON_DE./", $files, $Uhrzeit);

Folgendes bekomme ich einfach nicht hin das er den Codec ausliest:

Bones_Die_Knochenjaegerin_06.12.28_22-15_rtl_55_TVOON_DE.mpg.avi.otrkey = avi
Stephen_King_Salem_s_Lot_06.12.29_00-00_zdf_60_TVOON_DE.wmv.otrkey = wmv
The_Punisher_07.03.11_23-00_pro7_135_TVOON_DE.mpg.HQ.avi.otrkey = HQ


grüße strex
 
Hab das jetzt ganz anderes gelöst. Leg jetzt pro slot den ein user verbraucht einen Eintrag an und lösche diesen wieder wenn der Download beendet ist. Sollte einer den Download abbrechen bleibt der slot zwar in der Datenbank, aber nach 30min wieder dieser automatisch aus der DB gelöscht.

grüße strex

edit://nhoj gute idee, wo sollte ich diesen anwenden, ist nämlich etwas wenig code, der als Beispiel angegeben ist.
 
Zuletzt bearbeitet:
Nachdem du in der while-Schleife den Buffer leerst, kannst du
PHP:
if (connection_status()!=0) {
 // Eintrag löschen
}
einfügen.
 
Zurück