Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Php: Datenbank-Backup... (https://www.delphipraxis.net/55408-php-datenbank-backup.html)

glkgereon 24. Okt 2005 13:42

Re: Php: Datenbank-Backup...
 
genial...funktioniert :)

gibt es nun noch eine möglichkeit das a) wieder automatisch einzulesen und b) das ganze nicht einfach auszugeben sondern als Datei runterzuladen?

Edit:
wäre folgendes denkbar?
Code:
for ($i=0;$i<count($zeilen);$i++) {
  if ($zeilen[$i][1]!="-") {
    if ($zeilen[$i][strlen($zeilen[$i])]==",") {
      $akt = $akt.$zeilen[$i];
    } else if ($zeilen[$i][strlen($zeilen[$i])]==";") {
      $akt = $akt.$zeilen[$i];
      mysql_query($akt);
      $akt = "";
    }
  }
}

Flocke 24. Okt 2005 14:44

Re: Php: Datenbank-Backup...
 
Zu (b):
Wenn du diese Zeile einbaust, dann bietet dir der Browser das Abspeichern an.
Code:
header('Content-Disposition: attachment; filename="sqlbackup.txt"';
Ggf. solltest du auch noch
Code:
ob_start("ob_gz_handler");
aufrufen, dann wird's komprimiert (nicht die Datei sondern die Übertragung).

Zu (a):
Das ist nicht ganz trivial, weil ja in den Werten auch diese Zeichen vorkommen können, auf die du prüfst.

Ich schreib gerade mal was ...

glkgereon 24. Okt 2005 15:11

Re: Php: Datenbank-Backup...
 
Zitat:

Zitat von Flocke
Zu (b):
Wenn du diese Zeile einbaust, dann bietet dir der Browser das Abspeichern an.
Code:
header('Content-Disposition: attachment; filename="sqlbackup.txt"';
Ggf. solltest du auch noch
Code:
ob_start("ob_gz_handler");
aufrufen, dann wird's komprimiert (nicht die Datei sondern die Übertragung).

Zu (a):
Das ist nicht ganz trivial, weil ja in den Werten auch diese Zeichen vorkommen können, auf die du prüfst.

Ich schreib gerade mal was ...

naja...also ich prüfe zunächst ob das erste zeichen ein - ist....das ist eindeutig!
übrig bleiben dann nur noch 2 mögliche Zeilenarten. die mit Komma am Ende, die mit Semikolon am ende, und die leeren.
also eigentlich sollte das ja klappen...oder verhau ich mich da gerade?

Flocke 24. Okt 2005 15:52

Re: Php: Datenbank-Backup...
 
Liste der Anhänge anzeigen (Anzahl: 1)
[Unten folgt ein //NACHTRAG]

Ich denke, es würde gehen. Diese Funktion hier ist aber allgemeiner:
Code:
function SplitSqlStatements(&$fulltext)
{
    $states = array(
        // Normal (top-level)
        0 => array(
            "#" => array( 's' => 1, 'a' => 0 ),
            "-" => array( 's' => 2, 'a' => 0 ),
            "/" => array( 's' => 4, 'a' => 0 ),
            "\n" => array( 's' => 0, 'a' => 1 ),
            "'" => array( 's' => 7, 'a' => 1 ),
            '"' => array( 's' => 9, 'a' => 1 ),
            '`' => array( 's' => 11, 'a' => 1 ),
            ';' => array( 's' => -1, 'a' => 0 ),
            999  => array( 's' => 0, 'a' => 1 ),
        ),
        // Kommentar bis Zeilenende
        1 => array(
            "\n" => array( 's' => 0, 'a' => 0 ),
            999  => array( 's' => 1, 'a' => 0 ),
        ),
        // Minuszeichen gesehen
        2 => array(
            "-" => array( 's' => 3, 'a' => 0 ),
            999  => array( 's' => 0, 'a' => 1, 'i' => "-" ),
        ),
        // Zweites Minuszeichen gesehen
        3 => array(
            " " => array( 's' => 1, 'a' => 0 ),
            999  => array( 's' => 0, 'a' => 2, 'i' => "--" ),
        ),
        // Schrägstrich gesehen
        4 => array(
            "*" => array( 's' => 5, 'a' => 0 ),
            999  => array( 's' => 0, 'a' => 2, 'i' => "/" ),
        ),
        // C-style Kommentar
        5 => array(
            "*" => array( 's' => 6, 'a' => 0 ),
            999  => array( 's' => 5, 'a' => 0 ),
        ),
        // Stern gesehen im C-style Kommentar
        6 => array(
            "/" => array( 's' => 0, 'a' => 0 ),
            999  => array( 's' => 5, 'a' => 0 ),
        ),
        // Single quote
        7 => array(
            "'" => array( 's' => 0, 'a' => 1 ),
            "\\" => array( 's' => 8, 'a' => 1 ),
            999  => array( 's' => 7, 'a' => 1 ),
        ),
        // Backslash im single quote
        8 => array(
            999  => array( 's' => 7, 'a' => 1 ),
        ),
        // Double quote
        9 => array(
            '"' => array( 's' => 0, 'a' => 1 ),
            "\\" => array( 's' => 10, 'a' => 1 ),
            999  => array( 's' => 9, 'a' => 1 ),
        ),
        // Backslash im single quote
        10 => array(
            999  => array( 's' => 9, 'a' => 1 ),
        ),
        // Double quote
        11 => array(
            '`' => array( 's' => 0, 'a' => 1 ),
            "\\" => array( 's' => 12, 'a' => 1 ),
            999  => array( 's' => 11, 'a' => 1 ),
        ),
        // Backslash im backquote
        12 => array(
            999  => array( 's' => 11, 'a' => 1 ),
        ),
    );

    $state = 0;
    $result = array();
    $stmt = "";
    $len = strlen($fulltext);

    for ($k = 0; $k < $len; $k++)
    {
        $ch = $fulltext{$k};
        $ix = isset($states[$state][$ch]) ? $ch : 999;

        if (!empty($states[$state][$ix]['i']))
            $stmt .= $states[$state][$ix]['i'];

        if (!empty($states[$state][$ix]['a']))
            if (!empty($stmt) || ($ch != ' ' && $ch != "\n"))
                $stmt .= $ch;

        $state = $states[$state][$ix]['s'];

        if ($state == -1)
        {
            if (!empty($stmt))
                $result[] = $stmt;
            $stmt = "";
            $state = 0;
        }
    }

    if (!empty($stmt))
        $result[] = $stmt;

    return $result;
}
//NACHTRAG:

Hab's die Datei von oben noch mal ein bisschen angepasst und angehängt. Die Klasse ist jetzt um die Methode "Import" erweitert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz