From ed50a77498d8ad5b8666a91ddf74338618445f5e Mon Sep 17 00:00:00 2001 From: DSB Date: Fri, 10 Jun 2011 22:58:43 +0000 Subject: [PATCH] --- config.php | 87 +++++++++++++++++++++ cron_dump.php | 138 +++++++++++++++++++++++++++++++++ dump.php | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++ functions.php | 146 +++++++++++++++++++++++++++++++++++ index.php | 159 ++++++++++++++++++++++++++++++++++++++ readme.txt | 37 +++++++++ restore.php | 115 ++++++++++++++++++++++++++++ 7 files changed, 888 insertions(+) create mode 100644 config.php create mode 100644 cron_dump.php create mode 100644 dump.php create mode 100644 functions.php create mode 100644 index.php create mode 100644 readme.txt create mode 100644 restore.php diff --git a/config.php b/config.php new file mode 100644 index 0000000..5c56d20 --- /dev/null +++ b/config.php @@ -0,0 +1,87 @@ + ja +// $send_mail=0 -> nein +// Achte aber darauf, dass Dein Postfach auch gro� genug f�r Dein Dumpfile ist! + +$send_mail=0; + +// Wohin soll die Email geschickt werden? +$email[0]="admin@daniel-schlichtholz.de"; + +// Welche Absenderadresse soll drinstehen? +$email[1]="mein_board@weltweit.de"; + + +//////////////////////////////////////////////////////////////// +// +// Variablen, die nur bei Problemen ge�ndert werden sollten... +// +//////////////////////////////////////////////////////////////// + + // neue Zeile-Code (soll nur einen Zeilenumbruch im Dump bewirken) +$nl="\n"; + +// Der "Ende des SQL-Befehls"-Code kann ge�ndert werden falls in der Datenbank +// zuf�llig der Standardcode (CHR(1)) vorhanden sein sollte und Du Fehlermeldungen +// beim Restore bekommst. +// Es muss aber ein eindeutiger String sein, der NICHT in den Daten der DB vorkommt. +// z.B. $next_sqlcommand="hier_beginnt_wirklich_der_neue_befehl_124356"; +// ein langer String bl�ht zwar das Dumpfile etwas auf, aber lieber ein gro�es funktionierendes +// Backup, als ein kleines kaputtes :-) + +$next_sqlcommand=CHR(1); + +// Wieviele Zeilen sollen pro Seitenaufruf gespeichert werden? +// Hier musst Du testen, was Dein Provider so mitmacht :-) +// Je h�her die Zahl, desto schneller ist das Backup fertig, aber +// die Gefahr auf ein Timeout zu laufen steigt damit nat�rlich auch. +// Falls Du einen Timeout-Error erhaeltst, verringere die Zahl entsprechend. + +$anzahl_zeilen=2000; + +// Wieviele SQL-Befehle sollen pro Seitenaufruf in die DB geschrieben werden? +// MySQL ist beim Schreiben langsamer, als beim Lesen - +// deshalb sollte die Zahl nicht zu hoch gew�hlt werden. +// Falls Du einen Timeout-Error erhaeltst, verringere die Zahl entsprechend. + +$anzahl_zeilen_restore=1000; + +?> \ No newline at end of file diff --git a/cron_dump.php b/cron_dump.php new file mode 100644 index 0000000..17e9e6f --- /dev/null +++ b/cron_dump.php @@ -0,0 +1,138 @@ + Backupdatei anlegen + $cur_time=date("Y-m-d H:i"); + $newfile="# Dump created on $cur_time\r\n"; + $newfile.="# Remember that you must use my restorescript in order to get a working DB\r\n"; + $newfile.="# because I use a special code to mark the end of a command.\r\n"; + $newfile.="# This is NOT compatible with other restorescripts!\r\n"; + $newfile.="# Anyway, have fun with this but use it at your own risk. :-) \r\n"; + + if ($compression==1) + { + $fp = gzopen ($path.$backupdatei,"wb"); + gzwrite ($fp,$newfile); + gzclose ($fp); + chmod($path.$backupdatei,0777); + } + else + { + $fp = fopen ($path.$backupdatei,"wb"); + fwrite ($fp,$newfile); + fclose ($fp); + chmod($path.$backupdatei,0777); + } +} + +$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error()); +$tabellen = mysql_list_tables($dbname,$conn); +$num_tables = @mysql_num_rows($tabellen); +$tables=ARRAY(); +if ($num_tables>0) +{ + for ($i=0;$i<$num_tables;$i++) + { + $erg=mysql_fetch_row($tabellen); + $tables[$i]=$erg[0]; + } +} +else die ("
Fehler:
Ich konnte keine Tabellen in der Datenbank '".$dbname."' finden."); + +///////////////////////////////// +// Anzeige - Fortschritt +///////////////////////////////// +echo "\nMySql - DB-Restore\n"; +echo "\n"; +echo ""; +echo "\n"; +echo "\n"; + +$newfile=""; +if ($table_offset < $num_tables) +{ + $table = $tables[$table_offset]; + $aktuelle_tabelle=$table_offset; + if ($zeilen_offset==0) + { + $newfile .= get_def($dbname,$table); + } + $newfile .= get_content($dbname,$table); +} +if ($compression==1) +{ + $fp = gzopen ($path.$backupdatei,"ab"); + gzwrite ($fp,$newfile); + gzclose ($fp); +} +else +{ + $fp = fopen ($path.$backupdatei,"ab"); + fwrite ($fp,$newfile); + fclose ($fp); +} + +if ($table_offset<$num_tables) +{ + // Selbstaufruf starten + echo "\n\n\n\n"; +} +else +{ + if ($send_mail==1) + { + $msg_body = "\n\r\n\rIn der Anlage findest Du die Sicherung Deiner MySQL-Datenbank.\n\r" + ." Sicherung der Datenbank '".$dbname."' vom ".date("d\.m\.Y",time()) + .".\n\r\n\rViele Grüsse\n\r\n\rMySQLDump\n\rhttp://www.daniel-schlichtholz.de/board"; + $file = "./$path/$backupdatei"; + $folder = $path; + $fname = $backupdatei; + $file_type = filetype("$file"); + $file_size = filesize("$file"); + $file_name = "$fname"; + $subject = "Backup '".$dbname."' - ".date("d\.m\.Y",time()); + $fp = fopen($file, "r"); + $contents = fread($fp, $file_size); + $encoded_file = chunk_split(base64_encode($contents)); + fclose($fp); + $header.= "FROM:$email[1] <$email[0]>\n"; + $header.= "MIME-version: 1.0\n"; + $header.= "Content-type: multipart/mixed; "; + $header.= "boundary=\"Message-Boundary\"\n"; + $header.= "Content-transfer-encoding: 7BIT\n"; + $header.= "X-attachments: $file_name"; + $body_top = "--Message-Boundary\n"; + $body_top.= "Content-type: text/plain; charset=US-ASCII\n"; + $body_top.= "Content-transfer-encoding: 7BIT\n"; + $body_top.= "Content-description: Mail message body\n\n"; + $msg_body = $body_top . $msg_body; + $msg_body.= "\n\n--Message-Boundary\n"; + $msg_body.= "Content-type: $file_type; name=\"$file_name\"\n"; + $msg_body.= "Content-Transfer-Encoding: BASE64\n"; + $msg_body.= "Content-disposition: attachment; filename=\"$file_name\"\n\n"; + $msg_body.= "$encoded_file\n"; + $msg_body.= "--Message-Boundary--\n"; + mail($email[0], stripslashes($subject), $msg_body, $header); + } +} +echo "\n\n\n\n"; + +?> \ No newline at end of file diff --git a/dump.php b/dump.php new file mode 100644 index 0000000..17a5efa --- /dev/null +++ b/dump.php @@ -0,0 +1,206 @@ + Backupdatei anlegen + $cur_time=date("Y-m-d H:i"); + $newfile="# Dump created on $cur_time\r\n"; + $newfile.="# Remember that you must use my restorescript in order to get a working DB\r\n"; + $newfile.="# because I use a special code to mark the end of a command.\r\n"; + $newfile.="# This is NOT compatible with other restorescripts!\r\n"; + $newfile.="# Anyway, have fun with this but use it at your own risk. :-) \r\n"; + + if ($compression==1) + { + $fp = gzopen ($path.$backupdatei,"wb"); + gzwrite ($fp,$newfile); + gzclose ($fp); + chmod($path.$backupdatei,0777); + } + else + { + $fp = fopen ($path.$backupdatei,"wb"); + fwrite ($fp,$newfile); + fclose ($fp); + chmod($path.$backupdatei,0777); + } +} + +$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error()); +$tabellen = mysql_list_tables($dbname,$conn); +$num_tables = @mysql_num_rows($tabellen); +$tables=ARRAY(); +if ($num_tables>0) +{ + for ($i=0;$i<$num_tables;$i++) + { + $erg=mysql_fetch_row($tabellen); + $tables[$i]=$erg[0]; + } +} +else die ("
Fehler:
Ich konnte keine Tabellen in der Datenbank '".$dbname."' finden."); + +///////////////////////////////// +// Anzeige - Fortschritt +///////////////////////////////// +echo "\nMySql - DB-Restore\n"; +echo "\n"; +echo ""; +echo "\n"; +echo "\n"; +echo "

Datenbank-Backup:

\n"; +echo "GZip-Kompression ist: "; +if ($compression==1) echo "an"; else echo "aus"; + +$sql="SELECT COUNT(*) AS anzahl FROM ".$tables[$table_offset]; +$res=mysql_query($sql); +if ($res) +{ + $row=mysql_fetch_object($res); + $gesamt=intval($row->anzahl); + if ($gesamt>0) + { + $fortschritt=round(((100*$zeilen_offset)/$gesamt),0); + if ($anzahl_zeilen>=$gesamt) $fortschritt=100; + } + else $fortschritt=100; + + echo "
Speichere Tabelle ".($table_offset+1)." von ".sizeof($tables).""; + echo "
aktuelle Tabelle: ".($tables[$table_offset])."
"; + + echo "
Fortschritt Tabelle:
\n"; + echo "\n\n"; + echo "\n"; + echo "\n"; + echo "\n"; + + if ($anzahl_zeilen+$zeilen_offset>=$gesamt) + { + $eintrag=$zeilen_offset+1; + $zeilen_gesamt=$gesamt; + if ($zeilen_gesamt==0) $eintrag=0; + } + else + { + $zeilen_gesamt=$zeilen_offset+$anzahl_zeilen; + $eintrag=$zeilen_offset+1; + } + + echo "\n\n"; + echo "\n"; + echo "\n\n
  ".($fortschritt)." %
Eintrag ".number_format($eintrag,0,",",".")." bis "; + echo number_format(($zeilen_gesamt),0,",",".")." von "; + echo number_format($gesamt,0,",",".")."
\n\n"; + + $tabellen_gesamt=sizeof($tables); + $noch_zu_speichern=$tabellen_gesamt-$table_offset; + $prozent= ($tabellen_gesamt>0) ? round(((100*$noch_zu_speichern)/$tabellen_gesamt),0) : 100; + if ($noch_zu_speichern==0) $prozent=100; + + echo "
Fortschritt gesamt:"; + echo "\n\n\n\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n
".(100-$prozent)." %
\n"; + + flush(); +} +////////////////////////////////////// +// Ende Anzeige +////////////////////////////////////// + +$newfile=""; +if ($table_offset < $num_tables) +{ + $table = $tables[$table_offset]; + $aktuelle_tabelle=$table_offset; + if ($zeilen_offset==0) + { + $newfile .= get_def($dbname,$table); + } + $newfile .= get_content($dbname,$table); +} +if ($compression==1) +{ + $fp = gzopen ($path.$backupdatei,"ab"); + gzwrite ($fp,$newfile); + gzclose ($fp); +} +else +{ + $fp = fopen ($path.$backupdatei,"ab"); + fwrite ($fp,$newfile); + fclose ($fp); +} + +flush(); +if ($table_offset<=$tabellen_gesamt) +{ + // Selbstaufruf starten + echo "\n\n\n\n"; +} +else +{ + echo "

Alles fertig!"; + echo "
Die Backupdatei wurde erfolgreich erstellt."; + echo "

Hier kannst Du sie nun herunterladen."; + if ($send_mail==1) + { + $msg_body = "\n\r\n\rIn der Anlage findest Du die Sicherung Deiner MySQL-Datenbank.\n\r" + ." Sicherung der Datenbank '".$dbname."' vom ".date("d\.m\.Y",time()) + .".\n\r\n\rViele Grüsse\n\r\n\rMySQLDump\n\rhttp://www.daniel-schlichtholz.de/board"; + $file = "./$path/$backupdatei"; + $folder = $path; + $fname = $backupdatei; + $file_type = filetype("$file"); + $file_size = filesize("$file"); + $file_name = "$fname"; + $subject = "Backup '".$dbname."' - ".date("d\.m\.Y",time()); + $fp = fopen($file, "r"); + $contents = fread($fp, $file_size); + $encoded_file = chunk_split(base64_encode($contents)); + fclose($fp); + $header.= "FROM:$email[1] <$email[0]>\n"; + $header.= "MIME-version: 1.0\n"; + $header.= "Content-type: multipart/mixed; "; + $header.= "boundary=\"Message-Boundary\"\n"; + $header.= "Content-transfer-encoding: 7BIT\n"; + $header.= "X-attachments: $file_name"; + $body_top = "--Message-Boundary\n"; + $body_top.= "Content-type: text/plain; charset=US-ASCII\n"; + $body_top.= "Content-transfer-encoding: 7BIT\n"; + $body_top.= "Content-description: Mail message body\n\n"; + $msg_body = $body_top . $msg_body; + $msg_body.= "\n\n--Message-Boundary\n"; + $msg_body.= "Content-type: $file_type; name=\"$file_name\"\n"; + $msg_body.= "Content-Transfer-Encoding: BASE64\n"; + $msg_body.= "Content-disposition: attachment; filename=\"$file_name\"\n\n"; + $msg_body.= "$encoded_file\n"; + $msg_body.= "--Message-Boundary--\n"; + if (mail($email[0], stripslashes($subject), $msg_body, $header)) + echo "
Das Dumpfile wurde erfolgreich per Email verschickt."; + else echo "
Leider ist beim Verschicken der Email ein Fehler aufgetreten.!"; + } + echo "


Hier geht es zurück zum Kontrollzentrum"; +} +echo "\n\n\n\n"; + +?> \ No newline at end of file diff --git a/functions.php b/functions.php new file mode 100644 index 0000000..9762d88 --- /dev/null +++ b/functions.php @@ -0,0 +1,146 @@ +$anzahl_zeilen) + { + $zeilen_offset=$zeilen_offset+$anzahl_zeilen; + $ergebnisse--; + } + else + { + $table_offset++; + $zeilen_offset=0; + } + for ($x=0;$x<$ergebnisse;$x++) + { + $row=mysql_fetch_row($result); + { + $insert = "INSERT INTO $table VALUES ("; + for($j=0; $j0) && (substr($t,0,1)!="#") ) return $t; + else return ""; +} + +// extrahiert auf einfache Art den Tabellennamen aus dem "Create"-Befehl +function get_tablename($t) +{ + global $table_ready; + $t=trim(str_replace("CREATE TABLE","",$t)); + $w=explode(" ",$t); + $table_ready++; + return $w[0]; +} + +// Liest zeilenweise aus dem Dump und setzt den MySQl-Befehl +// bis zum Vorkommen des Codes [chr(1)] zusammen +function get_sqlbefehl() +{ + global $f,$gz,$end,$actual_table,$next_sqlcommand; + $ret=false; + $befehl=""; + $befehl_gefunden=false; + WHILE ( ($befehl_gefunden==false) && (!($end)) ) + { + $zeile= ($gz) ? gzgets($f,40960) : fgets($f,40960); + if ($zeile) + { + // Prima, wir haben Text in unserer Zeile. + // Dann wollen wir den Befehl mal zusammensetzen. :-) + + // Zuerst mal schauen, ob es sich nicht um eine Kommentarzeile handelt + // Aber nur am Anfang eines Befehls - sonst besteht die Gefahr, dass + // Zeilen in Datensaetzen geloescht werden. + if ($befehl=="") $zeile=is_sqlvalue($zeile); + + // Dann schauen wir mal nach dem Ende-Code... + $pos=strpos($zeile,$next_sqlcommand); + if (!$pos===false) + { + // Ende des Befehls gefunden - Rueckgabe ohne Semikolon und Ende-Code + $befehl.=substr($zeile,0,($pos-1)); + $befehl_gefunden=true; + $ret=$befehl; + } + // Befehl ist noch nicht fertig: Zeile zum Befehl hinzufuegen + else $befehl.=$zeile; + + // Pruefen, ob die naechste Tabelle angelegt wird (nur fuer Infoanzeige) + if (strtolower(substr($zeile,0,13))=="create table ") $actual_table=get_tablename($zeile); + } + else + { + // Ups, kein Rueckgabewert in der Zeile? + // Ja sind wir denn schon fertig? - Das ueberpruefen wir mal mit eof()... + if ( ($gz) && (gzeof($f)) ) $end=true; + if ( (!$gz) && (feof($f)) ) $end=true; + $ret="end of file"; + } + } + return $ret; +} + +?> \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..9af9208 --- /dev/null +++ b/index.php @@ -0,0 +1,159 @@ +\n\n\n"; +echo "MySql-DB-Dump/Restore\n"; +echo "\n"; + +echo "\n"; +echo "\n"; +echo "Konfiguration:
"; +echo "GZip-Komprimierung ist "; +if (!$compression) echo "nicht "; +echo "aktiviert.
"; +echo "Die Backupdatei wird im Ordner '".$path."' abgelegt.
"; +echo "Gesichert wird die Datenbank: '".$dbhost."/".$dbname."'.
"; +echo "Nach dem Backup wird "; +if (!$send_mail) echo "k"; +echo "eine Email mit dem Dumpfile "; +if ($send_mail) echo "an '".$email[0]."' "; +echo "verschickt.
"; +echo "
Um die Konfiguration zu verändern, musst Du die Datei 'config.php' bearbeiten.

"; +//-------------------------------------------------------- +//*** Abfrage ob Neues Dump *** +//-------------------------------------------------------- +if (isset($_POST["dump"])) +{ + include("dump.php"); + exit; +} +//-------------------------------------------------------- +//*** Abfrage ob Restore *** +//-------------------------------------------------------- +if (isset($_POST["restore"])) +{ + if (isset($_POST["file"])) + { + PRINT "

Soll die Datenbank '".$dbname; + echo "' mit den Inhalten der Datei '".$file."' wiederhergestellt werden?

\n"; + PRINT "
\n"; + PRINT "\n"; + PRINT ", ich bin sicher.\n"; + PRINT " lieber nicht.\n"; + PRINT "
\n"; + echo "\n"; + exit; + } + ELSE + PRINT "

Bitte zuerst eine Datei auswählen!

\n"; +} + +//-------------------------------------------------------- +//*** Abfrage ob Delete *** +//-------------------------------------------------------- +if (isset($_POST["delete"])) +{ + if (isset($_POST["file"])) + { + $file=$_POST["file"]; + if (@unlink($path.$file)) + PRINT "

Die Datei $file wurde erfolgreich gelöscht.

"; + else + PRINT "

Löschen der Datei $file GESCHEITERT!

"; + } + ELSE + PRINT "

Bitte zuerst eine Datei auswählen!

\n"; +} + +//-------------------------------------------------------- +//*** Ausgabe der Dateien *** +//-------------------------------------------------------- + +// Backupverzeichnis existiert noch nicht? Na gut, dann machen wir eben eins. :-) PUS +if (!is_dir($path)) mkdir($path, 0777); +$dh = opendir($path); +while (false !== ($filename = readdir($dh))) +{ + if ($filename != "." && $filename != "..") $files[] = $filename; +} +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +@rsort($files); +echo "\n"; +for ($i=0; $i\n"; + echo "\n"; + echo "\n"; + echo "\n\t\n"; +} +if (!is_array($files)) echo "\n"; + + + +//-------------------------------------------------------- +//*** Ausgabe der Gesamtgröße aller Backupfiles *** +//-------------------------------------------------------- +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +//echo "
 DateinameDateigröße
$files[$i]".round($size/1024)." kByte
Keine Datei gefunden.
Gesamtgröße:".round($gesamt/1024)." kByte
\n"; + + +//-------------------------------------------------------- +//*** Ausgabe des freien Speicher auf dem Rechner *** +//-------------------------------------------------------- +//echo "\n"; +echo "\n"; +echo ""; +echo "\n"; +echo "\n"; + +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n"; + +echo "\n\n"; + +echo "\n\n"; +echo "\n"; +echo "\n"; +echo "\n"; +echo "\n\n\n"; + +echo "
Freier Speicher auf Server: ".round(($space/(1024*1024*1024)),2)." GByte
Wähle eine Datei zur Wiederherstellung oder zum Löschen aus:
 
Oder beginne ein neues Backup:"; +echo "
 
\n"; +echo "
"; +echo "Zum Hilfeboard"; +?> \ No newline at end of file diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..7fa53a0 --- /dev/null +++ b/readme.txt @@ -0,0 +1,37 @@ +MySQlDump von Daniel Schlichtholz +Version 0.9.2 +http://www.daniel-schlichtholz.de/board + + +Willkommen und viel Spaß bei der Benutzung von MySqlDump mit PHP. + +Die Benutzung erfolgt auf eigene Gefahr. +Ich kann nicht für Datenverluste verantwortlich gemacht werden. + +Was hat sich in dieser Version geändert: +---------------------------------------- +Die Datei "index.php" ist als neue Schaltzentrale hinzugekommen. +Von hier aus kann man jetzt alle Aktionen auslösen. +Hier habe ich die Erweiterung von Elax und pus234 eingebaut - Vielen Dank. + +Erweiterung von Joachim Leicht eingebaut (http://nic.eu.ki) - Vielen Dank. +Das Dumpfile kann nun als Email verschickt werden. + +Es ist die Datei "cron_dump.php" hinzugekommen. +Diese Datei eignet sich als Aufrufziel eines Cronjobs, da sie auf +Ausgaben völlig verzichtet. Sie orientiert sich aber an den Einstellungen +in der config.php. + +Ich habe alle Funktionen in die Datei "functions.php" ausgelagert. +Das macht die anderen Dateien übersichtlicher und vereinfacht eine +Erweiterung durch andere Programmierer. + +In "config.php" kann man nun den "neuer_sql-Befehl-Code" selbst einstellen. +(Es kann auch ein längerer String sein.) + +Bugfix: +bei register_globals=off vergaß "dump.php" den Namen der Backupdatei - gefixt + + +Viel Spaß mit dem Script. +DSB (Daniel Schlichtholz) \ No newline at end of file diff --git a/restore.php b/restore.php new file mode 100644 index 0000000..084269e --- /dev/null +++ b/restore.php @@ -0,0 +1,115 @@ +\nMySql - DB-Restore\n"; +echo "\n\n"; +echo "\n"; +echo "\n\n"; + +// Datei oeffnen +$f = ($gz) ? gzopen($path.$filename,"r") : fopen($path.$filename,"r"); +if ($f) +{ + // Wenn GZ-Komprimierung aus ist, koennen wir mit Hilfe der Filegroesse + // ausrechnen, wieviel Prozent der Datei fertig sind. + // Bei GZ=1 geht es nicht, weil sich der Offset auf die ungepackte Groesse + // bezieht und somit nicht ins Verhältnis zur Dateigroesse gestellt werden kann. + if ($gz==0) $filegroesse=filesize($path.$filename); + $sql_command=array(); + + // Dateizeiger an die richtige Stelle setzen + ($gz) ? gzseek($f,$offset) : fseek($f,$offset); + + // Jetzt basteln wir uns mal unsere Befehle zusammen... + $a=0; + WHILE ( ($a<$anzahl_zeilen_restore) && (!$end) ) + { + $befehl=""; + // Einen MySQL-Befehl holen. Solange, bis wir wirklich etwas sinnvolles haben... + WHILE ( ($befehl=="") && (!$end) ) { $befehl=get_sqlbefehl();} + + if ($befehl=="end of file") + { + // Am Ende der Datei angekommen - Schleife verlassen + $end=true; + break; + } + else + { + $sql_command[$a]=$befehl; + $a++; + } + } + + // Offset merken, um beim naechsten Seitenaufruf an die richtige Stelle zu springen + $offset= ($gz) ? gztell($f) : ftell($f); + if ($gz) gzclose($f); else fclose($f); + + // Und jetzt koennen wir unsere MySQL-Befehle an die Datenbank schicken + $link = mysql_connect($dbhost, $dbuser, $dbpass) or die("Keine Verbindung zur Datenbank möglich!"); + mysql_select_db($dbname) or die("
Fehler:
Auswahl der Datenbank '".$dbname."' fehlgeschlagen!\n"); + for ($i=0;$i"; + echo "Fehler beim Eintrag des Befehls:
".$sql_command[$i]; + die(); + } + } + } + + if (!$end) + { + // Noch nicht fertig? - Dann Anzeige der Infos und Selbstaufruf durch Javascript + $aufruf=$aufruf+1; + if (!$gz) $prozent=($offset*100)/$filegroesse; + echo "

Wiederherstellung

"; + echo "der Datenbank '".$dbname."' auf '".$dbhost."'.
"; + + echo "
"; + if ($table_ready>0) echo $table_ready-1; else echo "0"; + echo " Tabellen wurden komplett wiederhergestellt."; + + echo "
Bisher wurden "; + echo number_format(($aufruf*$anzahl_zeilen_restore)-$table_ready,0,",",".")." Datensätze erfolgreich eingetragen."; + echo "
Momentan wird die Tabelle '".$actual_table."' mit Daten gefüllt.
"; + if (!$gz) echo "
".number_format(sprintf("%.4f",$prozent),4,",",".")." % der Datei eingetragen."; + + echo ""; + } + else + { + // Uff, geschafft! Jetzt darf die Leitung wieder abkuehlen. :-) + echo "

Wiederherstellung

"; + echo "der Datenbank '".$dbname."' auf '".$dbhost."'.
"; + + echo "
Herzlichen Glückwunsch."; + echo "

Die Datenbank wurde komplett wiederhergestellt."; + echo "
Alle Daten aus der Backupdatei wurden erfolgreich in die Datenbank eingetragen.
"; + echo "
Alles fertig. :-)"; + echo "
Hier geht es zurück zum Kontrollzentrum"; + } +} +else echo "Ich konnte die Datei '".$path.$filename."' nicht öffnen."; +echo "\n\n\n"; + +?> \ No newline at end of file