Hallo zusammen,
Ich möchte die Anzahl der Verbindungen zu einem Download zählen.
Das Problem ist nun, dass die Anzahl der geöffneten Verbindungen, laut DB, kleiner ist als die, der geschlossenen Verbindungen und ich habe ehrlich gesagt keine Ahnung woran das liegen kann.
Jeder Download hat eine eindeutige ID um den Download in der Datenbank wiederfinden zu können.
Um einen Download starten zu können, muss die /download.php?id=ID aufgerufen werden. Hier wird zuerst die Connection um eins nach oben gezählt.
(Default-value = 0)
Ich bin der Ansicht das dies auch funktioniert, da mindestens eine offene Verbindung besteht.
Vorher wird noch überprüft, ob die ID existiert und gleichzeitig die Anzahl der offenen Verbindungen aus der DB geholt. "connection" ist in der DB ein Feld vom Typ int.
Um nun zu schauen ob die Verbindung geschlossen wurde, lasse ich per Crontab ein Script laufen, dass überprüft ob in der Access.log die /download.php?id=ID drinnen steht, wenn dies der Fall ist soll die Anzahl der Verbindungen in der DB um 1 hochgezählt werden.
Syntax von Update: Update("table", SetArray, WhereArray);
Ich kopiere vorher den gesamten Inhalt der access.log in eine tmp-file und leere die access.log, damit sich die access.log bereits füllen kann, wenn das Script die tmpfile noch bearbeitet.
Nun ist es aber oft der Fall, dass die Anzahl der geschlossenen in der Datenbank höher sind, als die der geöffneten Verbindungen und ich habe ehrlich gesagt keine Ahnung woran das liegen kann.
Es muss ja jedes mal die /download.php aufgerufen werden bevor die Datei geladen wird, und sich somit die Zugriffe in der access.log mit den tatsächlichen decken müssten, oder irre ich mich in dem Punkt?
Hoffe ihr könnt mir helfen, stehe wirklich auf dem Schlauch :/
Gruß
prophet
Ich möchte die Anzahl der Verbindungen zu einem Download zählen.
Das Problem ist nun, dass die Anzahl der geöffneten Verbindungen, laut DB, kleiner ist als die, der geschlossenen Verbindungen und ich habe ehrlich gesagt keine Ahnung woran das liegen kann.
Jeder Download hat eine eindeutige ID um den Download in der Datenbank wiederfinden zu können.
Um einen Download starten zu können, muss die /download.php?id=ID aufgerufen werden. Hier wird zuerst die Connection um eins nach oben gezählt.
(Default-value = 0)
PHP-Code:
$connections = intval($info['connection']) + 1;
$success = $mysqli->Update('download', array('connection' => $connections), array('id' => urlencode(ID)));
Vorher wird noch überprüft, ob die ID existiert und gleichzeitig die Anzahl der offenen Verbindungen aus der DB geholt. "connection" ist in der DB ein Feld vom Typ int.
Um nun zu schauen ob die Verbindung geschlossen wurde, lasse ich per Crontab ein Script laufen, dass überprüft ob in der Access.log die /download.php?id=ID drinnen steht, wenn dies der Fall ist soll die Anzahl der Verbindungen in der DB um 1 hochgezählt werden.
PHP-Code:
foreach($lines as $line_num => $line){
$arr = getArrayFromString($line);
// Überprüfe ob download_start aufgerufen wurde
if(preg_match('/download.php/', $arr['request_uri'])){
$query = parse_url($line);
// _ entfernen, stammt von parse_url
// 0 key, 1 value
$id = explode("=", preg_replace("/_/", "", $query['query']));
// Überprüfe ob key vorhanden
$exist = $mysqli->Select('download', array('id' => $id[1]), true);
if($mysqli->affected==1){
// Downloadid existiert
$closedConnections = intval($exist['closedconnections']) + 1;
$mysqli->Update('download', array('closedconnections' => $closedConnections), array('id' => $id[1]));
}
}
Ich kopiere vorher den gesamten Inhalt der access.log in eine tmp-file und leere die access.log, damit sich die access.log bereits füllen kann, wenn das Script die tmpfile noch bearbeitet.
Nun ist es aber oft der Fall, dass die Anzahl der geschlossenen in der Datenbank höher sind, als die der geöffneten Verbindungen und ich habe ehrlich gesagt keine Ahnung woran das liegen kann.

Es muss ja jedes mal die /download.php aufgerufen werden bevor die Datei geladen wird, und sich somit die Zugriffe in der access.log mit den tatsächlichen decken müssten, oder irre ich mich in dem Punkt?
Hoffe ihr könnt mir helfen, stehe wirklich auf dem Schlauch :/
Gruß
prophet
Kommentar