Scripte

PHP Script: db_export-0.2_beta.lib.php

Nach obenNach unten

Zurück zur Übersicht - Datei downloaden

  1. <?php
  2.  
  3. // ============================================
  4. // Konfiguration
  5. // ============================================
  6.  
  7. // Mysql Zugangsdaten definieren
  8. define('MYSQL_HOST',     'localhost' );
  9. define('MYSQL_USER',     'root'      );
  10. define('MYSQL_PASS',     ''          );
  11. define('MYSQL_DATABASE', 'testdb'    );
  12.  
  13. // Soll eine Backup Datei angelegt werden?
  14. $make_backup = true;
  15.  
  16. // Wenn ja, wie lautet der Pfad zum Backupordner (mit Slash am Ende)?
  17. $backuppath = "../backup/";
  18.  
  19.  
  20. // ============================================
  21. // Script
  22. // ============================================
  23.  
  24. //Verbindung herstellen und Datenbank auswählen
  25. mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Bei dem Verbindungsaufbau mit der Datenbank ist ein Fehler aufgetreten.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte probieren Sie es später noch einmal.");
  26. mysql_select_db(MYSQL_DATABASE) OR die("Die Verbindung mit der Datenbank konnte zwar hergestellt werden, jedoch gab es Probleme beim Auswählen der Datenbank.<br>MySQL hat folgende Fehlermeldung ausgegeben: <tt>".mysql_error()."</tt><br>Bitte Probieren Sie es später noch einmal.");
  27.  
  28. //Settings aus der DB laden:
  29. $sql = "SELECT
  30.             name,
  31.             wert
  32.         FROM
  33.             settings
  34.         ";
  35. $tmp_return = mysql_query($sql) OR die(mysql_error());
  36.  
  37. //Arrays initialisieren
  38. $_tmp_settings = array();
  39. $_settings = array();
  40.  
  41. //Alle Daten auslesen und als name => wert in $_settings ablegen
  42. while($_data = mysql_fetch_assoc($tmp_return))
  43. {
  44.     $_tmp_settings[] = $_data;
  45. }
  46. foreach($_tmp_settings as $arr => $set)
  47. {
  48.     $_settings[ $set['name'] ] = $set['wert'];
  49. }
  50.  
  51. //Temponäre Daten löschen
  52. mysql_free_result($tmp_return);
  53. unset($tmp_return);
  54. unset($_tmp_settings);
  55.  
  56. $tables = explode(",",$_settings['backup_tables']);
  57. $tmp_left_out = explode(",",$_settings['backup_left_out']);
  58. $left_out = array();
  59. foreach($tmp_left_out as $value)
  60. {
  61.     $left_out[$value] = true;
  62. }
  63. $make_truncate = $_settings['backup_make_truncate'];
  64.  
  65. $strings[0] = "###############################################################\n#\n# Backup der Tabellen:\n# ";
  66. foreach($tables as $table) $strings[0] .= $table . ", ";
  67. $strings[0] .= "\n# Stand: ".date("Y-m-d, h:i:s")."\n#\n###############################################################\n";
  68.  
  69. foreach($tables as $table)
  70. {
  71.     $sql = "SELECT
  72.                 *
  73.             FROM
  74.                 $table
  75.             ";
  76.     $return = mysql_query($sql);
  77.    
  78.     $strings[] = "\n# ----------------------------------------\n# BACKUP TABELLE $table\n# ----------------------------------------";
  79.     if(!$return)
  80.     {
  81.         $strings[] = "# Es ist ein Fehler aufgetreten (MySQL): \n# ".mysql_error();
  82.         continue;
  83.     }
  84.     if($make_truncate)
  85.     {
  86.         $strings[] = "TRUNCATE TABLE $table;";
  87.     }
  88.    
  89.     while($_data = mysql_fetch_assoc($return))
  90.     {
  91.         $keys = array();
  92.         $values = array();
  93.        
  94.         foreach($_data as $key => $value)
  95.         {
  96.             if(isset($left_out[$table.".".$key])) continue;
  97.             $keys[] = $key;
  98.             if(!$value) $value = "NULL";
  99.             elseif(!is_numeric($value))
  100.             {
  101.                 $value = addslashes($value);
  102.                 $value = "\"$value\"";
  103.             }
  104.             $values[] = $value;
  105.         }
  106.         $strings[] = "INSERT INTO $table ( ".implode(", ",$keys).")\n     VALUES ( ".implode(", ",$values).");";
  107.     }
  108. }
  109.  
  110. $backup = implode("\r\n\r\n",$strings);
  111.  
  112. //Wenn ein Backup gemacht werden soll
  113. if($make_backup)
  114. {
  115.     $filepath = $backuppath.MYSQL_DATABASE."_d".date("Ymd")."_t".date("hi").".txt";
  116.    
  117.     if(!$fp = @fopen($filepath,"w")) die("<b>Fatal Error:</b> Die Datei $filepath konnte entweder nicht angelegt oder für den Schreibvorgang geöffnet werden.");   
  118.     $ok = @flock($fp, LOCK_EX);
  119.    
  120.     for($x = 0; $x <= 5; $x++)
  121.     {
  122.         if($ok) break;
  123.         $ok = @flock($fp, LOCK_EX);
  124.     }
  125.    
  126.     if(!$ok) die("<b>Fatal Error:</b> Die Datei $filepath konnte nicht für den Schreibvorgang gesperrt werden.");
  127.    
  128.     if(!@fwrite($fp, $backup, strlen($backup))) die("<b>Fatal Error:</b> Das Backup konnte nicht in die Datei $filepath geschrieben werden.");
  129.    
  130.     fclose($fp);
  131. }
  132.  
  133. // ============================================
  134. // Ende des Scriptes, es folgt die Ausgabe
  135. // ============================================
  136. ?>
  137. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  138.  
  139. <html>
  140. <head>
  141.     <title>Backup der Datenbank <?php echo MYSQL_DATABASE; ?></title>
  142. </head>
  143.  
  144. <body>
  145.  
  146. <?php
  147.  
  148. echo "<h2>Backup erfolgreich</h2\n";
  149.  
  150. if($make_backup)
  151. {
  152.     echo "<p>Das nachfolgende Backup wurde erfolgreich in die Datei <b>$filepath</b> geschrieben und steht jetzt für weitere Verwendung zur Verfügung.</p>\n";
  153. }
  154. else
  155. {
  156.     echo "<p>Das Backup wird nun nachfolgend angezeigt:</p>\n";
  157. }
  158. echo "<hr>\n";
  159.  
  160. echo "<pre>";
  161. echo stripslashes($backup)."<br>";
  162. echo "</pre>";
  163.  
  164. ?>
  165.  
  166. </body>
  167. </html>
  168.  

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.