Hi Leute,
ich hab ein Problem. Ich hab ein Programm geschrieben das automatisch Downloads tätigt und diese in eine Datenbank einträgt.
Leider funktionieren ein paar Dinge nicht und die wären:
- Wenn schon zwei Downloads von einem Server getätigt werden, starten trozdem weitere ($server_check es sind maximal 2 Downloads pro Server möglich).
- Wenn ein Fehler auftritt schreibt es trozdem mehere laufende tasks (SELECT COUNT(*) FROM `task` WHERE `server` = '$ip')
Hier muss irgendwas nicht mit dem Ablauf stimmen, habt Ihr Ideen an was dies liegen könnte?
Danke für eure Hilfe!
Grüße strex
ich hab ein Problem. Ich hab ein Programm geschrieben das automatisch Downloads tätigt und diese in eine Datenbank einträgt.
Leider funktionieren ein paar Dinge nicht und die wären:
- Wenn schon zwei Downloads von einem Server getätigt werden, starten trozdem weitere ($server_check es sind maximal 2 Downloads pro Server möglich).
- Wenn ein Fehler auftritt schreibt es trozdem mehere laufende tasks (SELECT COUNT(*) FROM `task` WHERE `server` = '$ip')
Hier muss irgendwas nicht mit dem Ablauf stimmen, habt Ihr Ideen an was dies liegen könnte?
Danke für eure Hilfe!
Grüße strex
PHP:
<?
//download selctor v0.1
include("dbconnect.php");
$user = 'xxx';
$pw = 'xxx';
//Requestfile auslesen
$sql = mysql_query("SELECT `otrkey` FROM `uploads` WHERE `status` = '0' ORDER BY id ASC LIMIT 1");
while ($data = mysql_fetch_row($sql)) {
$otrkey = $data[0];
}
//Überprüfen ob´s die Datei wirklich gibt
$sql = mysql_query("SELECT * FROM `otrlist` WHERE `otrkey` = '$otrkey' AND `status` < '10' LIMIT 1");
$file_check = mysql_num_rows($sql);
if($file_check == 1){
$sql = mysql_query("SELECT `id`, `otrkey`, `dir`, `pfad`, `size`, `time`, `status`, `server`, `fortschritt` FROM `otrlist` WHERE `otrkey` = '$otrkey' LIMIT 1");
while ($data = mysql_fetch_row($sql)) {
$id = $data[0];
$otrkey = $data[1];
$dir = $data[2];
$pfad = $data[3];
$size = $data[4];
$time = date("d.m.Y - H:i",$data[5]);
$status = $data[6];
$server = $data[7];
$fortschritt = $data[8];
}
//otr-download.de uploader v0.1
$conf['file'] = "/home/otr/web/xxx/"; # Hier werden die otrkeys gespeichert
$con = './xxx/';
$conf['tmp'] = "/home/otr/web/xxx/tmp/"; # Hier werden die txt daten gespeichert
$otrkey="".$otrkey."";
$ip="".$server."";
echo ''.$ip.' - '.$otrkey.'<br>';
echo "$otrkey, $server, $user, $pw <br>";
//Server bestimmen
$Server = "xxx.de";
//Speicherplatz auslesen
$df = disk_free_space("/home");
$free = round(($df/1073741824),2);
$filespace = 5;
//Ob schon uploads laufen überprüfen
$server_check2 = mysql_query("SELECT COUNT(*) FROM `task` WHERE `server` = '$ip'");
while ($server_check1 = mysql_fetch_row($server_check2)) {
$server_check = $server_check1[0];
}
echo "$server_check<br>";
if($server_check = 0 || $server_check = 1){
if($free < $filespace) {
//Wenn zu wenig Speicherplatz auf dem Server ost
$SQL = "SELECT Link, Dateiname FROM otrkey WHERE Server = '$Server' ORDER BY Uhrzeit, downloads, id, Uhrzeit, Dateigroesse, timestamp ASC LIMIT 5";
$select = mysql_query($SQL, $DatabasePointer);
while ($slotsb = mysql_fetch_row($select)) {
$Link = $slotsb[0];
$otrkey2 = $slotsb[1];
unlink($Link);
$SQL = "DELETE FROM otrkey WHERE Link = '$Link'";
$stat22 = mysql_query($SQL, $DatabasePointer);
$url = "http://otrkeyfinder.com/interface/otrkey.php?server=260&code=xxx&action=del&otrkey=$otrkey2";
include(''.$url.'');
$sql = mysql_query("UPDATE `otrlist` SET `status` = '9' WHERE `otrkey` = '$otrkey2'");
$sql = mysql_query("UPDATE `otrlist` SET `fortschritt` = '0' WHERE `otrkey` = '$otrkey2'");
}
}
# Sollte reichen
@ini_set("max_execution_time", 21600);
set_time_limit(21600);
if($free > $filespace) {
for($count = 0; $count < 10; $count++) # 10 versuche runterzulanden
{
$ftp_conn = ftp_connect($server); # FTP Verbinden
$login_result = @ftp_login($ftp_conn, $user, $pw); # FTP Login
echo "test: $ftp_conn<br>";
if((!$ftp_conn) || (!$login_result)) # Ist alles OK
{ # Wenn nicht
@ftp_quit($ftp_conn);
$tmp = fopen($conf['tmp'].$otrkey.".txt","w"); # öffne tmp
fwrite($tmp, "1:".$server.":".$count); # zähle fehl-count hoch
fclose($tmp);
$count++;
sleep(400); # 4 min warten, vielleicht ist dann der FTP wieder on
}else{# Wenn ja
$gross_local = @filesize($conf['file'].$otrkey); # Checke die File größe auf der HDD, wenn vorhanden
$gross_ftp = @ftp_size($ftp_conn, "/".$dir."/".$otrkey); # Checke die File größe auf dem FTP
$time = time() + 30;
$tmp = fopen($conf['tmp'].$otrkey.".txt","w");
fwrite($tmp, "2:"); # schreibe in die tmp datei, dass es losgeht
fclose($tmp);
$tmp_gross_2 = "2"; # hmm
//Status des Uploads in die Datenbank schreiben
$sql = mysql_query("UPDATE `otrlist` SET `status` = '1' WHERE `otrkey` = '$otrkey' LIMIT 1");
$sql = mysql_query("INSERT INTO `task` (`status`, `server`, `option`, `request`) VALUES ('1','".$server."','".$otrkey."','0')");
$sql = mysql_query("UPDATE `uploads` SET `status` = '1' WHERE `otrkey` = '$otrkey'");
$ret = ftp_nb_get($ftp_conn, $conf['file'].$otrkey, "/".$dir."/".$otrkey, FTP_BINARY, $gross_local); # Startet den Download im Hintergrund
while ($ret == FTP_MOREDATA) # Download läuft
{
if(time() > $time) # Sind 30sec. um ?
{
clearstatcache(); # Ist wichtig
$tmp_gross = @filesize($conf['file'].$otrkey); # Checke die Dateigröße auf der HDD
if($tmp_gross != $tmp_gross_2) # Hat sich die Dateigröße geändert
{
$tmp_gross_2 = $tmp_gross;
$tmp_pro = round(($tmp_gross/$gross_ftp)*100); # Berechne den fortschritt in Prozent
//Fortschritt in die Datenbank schreiben
$sql = mysql_query("UPDATE `otrlist` SET `fortschritt` = '$tmp_pro' WHERE `otrkey` = '$otrkey' LIMIT 1");
$tmp = @fopen($conf['tmp'].$otrkey.".txt","w");
fwrite($tmp, "3:".$tmp_pro.":".$count); # Schreibt den Fortschritt in die tmp Datei
fclose($tmp);
$time = time() + 30;
$ret = ftp_nb_continue ($ftp_conn); # Weiter geht's mit dem Download
}else{
$ret = "gg"; # Die Dateigröße hat sich nicht geändert, dass bedeutet, irgendwas ist wieder schief gelaufen. Download wird neu gestartet
}
}else{
$ret = ftp_nb_continue ($ftp_conn); # Weiter geht's mit dem Download
}
}
clearstatcache(); # Ist wichtig
sleep(5); # Bissien Zeit lassen
if(@filesize($conf['file'].$otrkey) == $size) # Ist die Dateigröße auf der HDD gleich der FTP Größe
{
$count = '20'; # Verhindere das wieder aufnehmen den Downloads
#
# Das otrkey ist fertig und der Hauptserver kann es als online anzeigen
#
@unlink($conf['tmp'].$otrkey.".txt"); # Tmp Datei löschen
$url = "http://otrkeyfinder.com/interface/otrkey.php?server=260&code=xxx&action=add&otrkey=$otrkey";
include(''.$url.'');
@ftp_quit($ftp_conn); # FTP schließen
$size = filesize($con.$otrkey);
$time = filemtime($con.$otrkey);
$timestamp = time();
$files = $otrkey;
$filess = $con.$otrkey;
$date = date("d.m.Y, H:i:s", $time);
$chkmd5 = md5($con.$otrkey);
$timestamp = time();
@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, $Sender);
@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, $sendung);
@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);
@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(?:\.(HQ\.[a-z]+|[a-z]+))+\.otrkey", $files, $codec);
$SQL = "INSERT INTO otrkey ";
$SQL .= "(Dateiname, Dateigroesse, date, Link, Server, Sender, Sendung, Uhrzeit, Codec, downloads, md5, timestamp) VALUES ";
$SQL .= "('".$files."','".$size."','".date($date)."','".$filess."','".$Server."','".$Sender[1]."','".$sendung[1]."','".$Uhrzeit[1]."','".$codec[1]."','".$downy."','".$chkmd5."','".$timestamp."')";
$sql = mysql_query($SQL, $DatabasePointer);
if(sql == true){
echo "Eintrag war erfolgreich";
}else{
echo "ERROR, kein Eintrag in otrkey";
$sql = mysql_query("UPDATE `otrlist` SET `status` = '3' WHERE `otrkey` = '$otrkey' LIMIT 1");
$sql = mysql_query("DELETE FROM `task` WHERE `option` = '$otrkey'");
$sql = mysql_query("UPDATE `uploads` SET `status` = '1' WHERE `otrkey` = '$otrkey' LIMIT 1");
die;
}
//Datei ist nun korrekt auf dem Server
$sql = mysql_query("UPDATE `otrlist` SET `status` = '2' WHERE `otrkey` = '$otrkey' LIMIT 1");
$sql = mysql_query("DELETE FROM `task` WHERE `option` = '$otrkey'");
//Fortschritt in die Datenbank schreiben
$sql = mysql_query("UPDATE `otrlist` SET `fortschritt` = '100' WHERE `otrkey` = '$otrkey' LIMIT 1");
$sql = mysql_query("DELETE FROM `uploads` WHERE `otrkey` = '$otrkey'");
}else{ # Die Dateigröße stimmt nicht
$tmp = fopen($conf['tmp'].$otrkey.".txt","w");
fwrite($tmp, "4:".@filesize($conf['file'].$otrkey).":".$count); # zähle fehlcount hoch
fclose($tmp);
sleep(60); # ne Minute warten
}
}
if($count == 10){
//Wenn der Fehlercount zu hoch ist, den Status defekt eintragen
$sql = mysql_query("UPDATE `otrlist` SET `status` = '3' WHERE `otrkey` = '$otrkey' LIMIT 1");
$sql = mysql_query("DELETE FROM `task` WHERE `option` = '$otrkey'");
$sql = mysql_query("UPDATE `uploads` SET `status` = '1' WHERE `otrkey` = '$otrkey' LIMIT 1");
}
@unlink($conf['tmp'].$otrkey.".txt"); # Tmp Datei löschen
}
}
}
}else{
$sql = mysql_query("UPDATE `uploads` SET `status` = '1' WHERE `otrkey` = '$otrkey' LIMIT 1");
}
mysql_close($DatabasePointer);
?>