Scripte

PHP Script: db_export-1.0.lib.php

Nach obenNach unten

Zurück zur Übersicht - Datei downloaden

  1. <?php
  2.  
  3. //         ************************************
  4. //         ***      db_export.lib.php       ***
  5. //         ************************************
  6.  
  7. // -----------------------------------------------------------------------
  8. /*
  9.     Copyright:
  10.     ==============
  11.     Dieses Script wurde ursprünglich von Dennis Riehle geschrieben - Sie dürfen
  12.     das Script frei verwenden, bearbeiten und weitergeben, solange dieser Copyright
  13.     Hinweis nicht entfernt wird.
  14.     Es erfolgt keinerlei Haftung für eventuell durch dieses Script entstandene
  15.     Schäden - die Benutzung erfolgt auf eigene Gefahr.
  16.    
  17.     Beschreibung:
  18.     ==============
  19.     Mit diesem Script lässt sich ein Dump (Export) einer MySQL Datenbank erzeugen,
  20.     was z.B. für ein Backupsystem verwendet werden kann.
  21.    
  22.     Inhalt:
  23.     ==============
  24.     - Funktion: get_tables()
  25.     - Funktion: export_table_strukture()
  26.     - Funktion: export_table_data()
  27.     - Funktion: export_database()    [Hauptfunktion]
  28.    
  29.     Benutzung:
  30.     ==============
  31.     Nachdem mit mysql_connect() eine Verbindung zu einer Datenbank hergestellt wurde,
  32.     kann die Hauptfunktion wie folgt aufgerufen werden:
  33.    
  34.         export_database( string DB [, string/array Tabellen [, Zeilenumbruch ] ] )
  35.    
  36.     Für DB muss der Name der Datenbank übergeben werden, für Tabellen kann ein String
  37.     übergeben werden um nur eine Tabelle zu exportieren oder ein Array um alle im Array
  38.     enthaltenen Tabellen expotieren zu lassen. Wird Tabellen nicht angegeben oder ist
  39.     es false, werden alle Tabellen in der DB exportiert. Zusätzlich kann man einen
  40.     Zeilenumbruch angeben, der für den Dump genutzt wird - Standard ist \n.
  41.    
  42.     Die Funktion liefert als Rückgabewert den MySQL Dump.
  43. */
  44.  
  45. // -----------------------------------------------------------------------
  46. function get_tables($database)
  47. {
  48.     // Liste über alle existierenden Tabellen in der Datenbank besorgen
  49.     $result = mysql_query('SHOW TABLES FROM ' . $database . ';') OR die(mysql_error());
  50.     // Array für Liste initialisieren
  51.     $tables = array();
  52.     // MySQL Ergebnisliste durchgehen und jede Tabelle in $tables hinzufügen
  53.     while (list($current) = mysql_fetch_row($result)) {
  54.         $tables[] = $current;
  55.     }
  56.     // Und Tabellenarray zurückgeben
  57.     return $tables;
  58. }
  59.  
  60. // -----------------------------------------------------------------------
  61. function export_table_structure($db, $table, $drop_if_exists = true, $break = "\n")
  62. {
  63.     // Parameter für Zeilenumbruch kontrollieren, wenn ungültig auf \n setzen
  64.     $break = ($break == "\n" OR $break == "\r\n" OR $break == "\r") ? $break : "\n";
  65.     // Ausgabestring initialisieren
  66.     $sqlstring = "";
  67.     // Wenn DROP TABLE mit ausgegeben werden soll, dieses in den
  68.     // Ausgabestring schreiben
  69.     if($drop_if_exists)
  70.     {
  71.         $sqlstring .= "DROP TABLE IF EXISTS $table;$break";
  72.     }
  73.     // Die CREATE TABLE Syntax per SQL Befehl besorgen oder Fehler ausgeben
  74.     $return = mysql_query("SHOW CREATE TABLE $table") OR
  75.                 die("Fehler beim Exportieren der Tabellenstruktur von $table: "
  76.                     . mysql_error()
  77.                    );
  78.     // Auslesen, ...
  79.     $data = mysql_fetch_assoc($return);
  80.     // ...in Ausgabestring schreiben ...
  81.     $sqlstring .= str_replace("\n",$break, $data['Create Table']) . ";$break$break";
  82.     // ...und diesen zurück geben
  83.     return $sqlstring;
  84. }
  85.  
  86. // -----------------------------------------------------------------------
  87. function export_table_data($db, $table, $leave_out_fields = false, $break = "\n")
  88. {
  89.     // Parameter für Zeilenumbruch kontrollieren, wenn ungültig auf \n setzen
  90.     $break = ($break == "\n" OR $break == "\r\n" OR $break == "\r") ? $break : "\n";
  91.     // Alle Felder aus der Tabelle auslesen, bei Fehler abbrechen
  92.     $sql = "SELECT * FROM " . $table;
  93.     $return = mysql_query($sql) OR die(mysql_error());
  94.     // Ausgabestring initialisieren
  95.     $sqlstring = "";
  96.     // Alle Ergebniszeilen abarbeiten...
  97.     while($data = mysql_fetch_assoc($return))
  98.     {
  99.         // Arrays zum Sammeln der Key und der Value Werte initialisieren
  100.         $keys = array();
  101.         $values = array();
  102.         foreach($data as $key => $value)
  103.         {
  104.             // Wenn dieses Feld ausgelassen werden soll, fahre mit
  105.             // nächster Schleife fort
  106.             if(is_array($leave_out_fields) AND in_array($key, $leave_out_fields))
  107.             {
  108.                 continue;
  109.             }
  110.             // Sonst füge den aktuellen Key in das "Keysammelarray" hinzu
  111.             $keys[] = $key;
  112.             // Wenn das Value NULL ist, in den String NULL umwandeln
  113.             if($value === NULL)
  114.             {
  115.                 $value = "NULL";
  116.             }
  117.             // Wenn das Value leer oder False ist, ein "" als Value nehmen
  118.             elseif($value === "" OR $value === false)
  119.             {
  120.                 $value = '""';
  121.             }
  122.             // Wenn das Value nicht numerisch ist, es mit mysql_real_escape_string()
  123.             // escapen und zwischen " setzen
  124.             elseif(!is_numeric($value))
  125.             {
  126.                 $value = mysql_real_escape_string($value);
  127.                 $value = "\"$value\"";
  128.             }
  129.             // In allen anderen Fällen ist das Value numerisch, kann belassen
  130.             // werden wie es ist und direkt in das "Valuesammelarray" hinzugefügt
  131.             // werden
  132.             $values[] = $value;
  133.         }
  134.         // Aus den Sammelarrays jetzt einen INSERT INTO SQL-Befehl erstellen und diesen
  135.         // an die Ausgabe anhängen
  136.         $sqlstring .= "INSERT INTO $table ( ";
  137.         $sqlstring .= implode(", ",$keys);
  138.         $sqlstring .=   " )$break\tVALUES ( ";
  139.         $sqlstring .= implode(", ",$values);
  140.         $sqlstring .=   " );$break";
  141.     }
  142.     // Ausgabestring zurückliefern
  143.     return $sqlstring;
  144. }
  145.  
  146. // -----------------------------------------------------------------------
  147. function export_database($db, $tables_input = false, $break = "\n")
  148. {
  149.     // MySQL Datenbank auswählen
  150.     mysql_select_db($db) OR die("Fehler beim Auswählen der Datenbank: ".mysql_error());
  151.     // Parameter für Zeilenumbruch kontrollieren, wenn ungültig auf \n setzen
  152.     $break = ($break == "\n" OR $break == "\r\n" OR $break == "\r") ? $break : "\n";
  153.     // Ausgabestring für den Datenbank Dump initialisieren mit einer ersten Kommentarzeile
  154.     $exportstring = "-- -----------------------------------$break";
  155.     // Array für alle zu exportierenden Tabellen initialisieren
  156.     // Jeder Wert in diesem Array wird später als Tabellennamen aufgefasst und es wird
  157.     // versucht einen MySQL DUMP dieser Tabelle zu erstellen
  158.     $tables = array();
  159.     // Wenn für $tables_input ein Array übergeben wurde die Kopfzeile für einen indivi-
  160.     // duellen Datenbankexport erzeugen und alle Einträge aus dem Array in das Tabellen-
  161.     // array kopieren, sodass nur die im Array übergebenen Tabellen exportiert werden
  162.     if(is_array($tables_input))
  163.     {
  164.         $tables = $tables_input;
  165.         $exportstring .= "-- INDIVIDUAL DATABASE EXPORT       --$break";
  166.     }
  167.     // Ansonsten, wenn $tables_input ein einfacher String ist, diesen als eine Tabelle
  168.     // auffassen und nur diese eine Tabelle exportieren, als Single Database Export
  169.     elseif(!is_array($tables_input) AND $tables_input)
  170.     {
  171.         $tables[0] = $tables_input;
  172.         $exportstring .= "-- SINGLE DATABASE EXPORT           --$break";
  173.     }
  174.     // Wurde der Parameter $tables_input gar nicht mit übergeben oder ist dieser False, so
  175.     // wird per get_tables() herausgefunden welche Tabellen alle existieren und es werden
  176.     // alle Tabellen exportiert => Full Database Export
  177.     else
  178.     {
  179.         $tables = get_tables($db);
  180.         $exportstring .= "-- FULL DATABASE EXPORT             --$break";
  181.     }
  182.     // In den Ausgabestring die Kopfzeilen schreiben, welche den Namen der Datenbank in
  183.     // der die Tabellen liegen, das Datum zu dem der Dump erzeugt wurde sowie den Typ des
  184.     // Exports (s.o.) enthält
  185.     $exportstring .= "-- -----------------------------------$break";
  186.     $exportstring .= "-- Database: ".$db.str_repeat(" ",23 - strlen($db))."--$break";
  187.     $exportstring .= "-- Build: ".date("d.m.Y, H:i")."         --$break";
  188.     $exportstring .= "-- Script by Dennis Riehle          --$break";
  189.     $exportstring .= "-- -----------------------------------$break$break";
  190.     // Gehe alle Tabellen in $tables durch und exportiere nacheinander von jeder Tabelle
  191.     // die Struktur, sowie die Daten.
  192.     foreach($tables as $table)
  193.     {
  194.         $exportstring .= "-- Table: $table$break";
  195.         $exportstring .= "-- -----------------------------------$break";
  196.         $exportstring .= export_table_structure($db, $table, true, $break);
  197.         $exportstring .= export_table_data($db, $table, false, $break);
  198.         $exportstring .= "$break";
  199.     }
  200.     // Füge dem Exportstring noch ein Ende Kennzeichen hinzu...
  201.     $exportstring .= "-- -----------------------------------$break";
  202.     $exportstring .= "-- Export End                       --$break";
  203.     $exportstring .= "-- -----------------------------------$break";
  204.     // ...und liefere den kompletten String zurück.
  205.     return $exportstring;
  206. }
  207.  
  208. // -----------------------------------------------------------------------
  209. /*
  210.     ENDE
  211. */
  212. ?>

Zurück zur Übersicht - Datei downloaden

Nach obenNach unten

Valid XHTML 1.0! Valid CSS!

Letzte Änderungen: Sonntag, der 03. Februar 2008
© 2005, Dennis Riehle.