tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
974
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Jörgi15 Tutorials.de Gastzugang
    Hallo zusammen,

    ich habe ein Skript, das ein Datenbank-Backup ausführen soll.
    Nachdem der Befehl ausgeführt wurde, möchte ich überprüfen, ob alles geklappt hat.

    Wie geht das?

    Ich habe bis jetzt mehrere Möglichkeiten durchgespielt:

    $ausgabe = passthru('C:/xampplite/mysql/bin/mysqldump -u ' . $db_username . ' -p' . $db_password . ' -h ' . $db_host. ' ' . $db . ' > C:/dump.sql, $fp);
    Ergebnis: $ausgabe ist immer leer, $fp ist immer 1 (auch wenn ich z.B. den Pfad so verändere, dass die Datei nicht gefunden wird).

    oder

    $ausgabe = exec('C:/xampplite/mysql/bin/mysqldump -u ' . $db_username . ' -p' . $db_password . ' -h ' . $db_host. ' ' . $db . ' > C:/dump.sql, $fp);
    Ergebnis: $ausgabe ist immer leer, $fp nimmt untersch. Werte an: 256 bei Fehler, mal auch 255...
    Bei Aufruf einer nicht vorhandenen Datei ist es 1 (und genau so bei erfolgreicher Ausführung).
     

  2. #2
    Avatar von katosan
    katosan katosan ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    95
    Hi,

    die frage wäre erstmal was die Rückgabewerte von mysqldump auf windows ist?
    Bei unix shell apps ist klar, wenn nix zurückkommt ist alles super gelaufen.
    Wie das bei Windows ist wage ich nicht vorherzusagen ohne die Mysql-,PHP,Windows - Version zu kennen.

    Im allgemeinen würde ich dir von einer php - basierten ausführung erstmal pauschal abraten, im einzelfall kann es durchaus Sinn machen aber in der Masse ist so ein Backup über einen Webserver ein echtes Sicherheitsrisiko
    .
    zb könnte man dieses auf deine bedürfnissen anpassen:

    http://teamtutorials.com/windows-tut...-backup-script

    un diese Dateien wenn es den sein muss per webserver zur verfügung stellen.

    gruß

    katoasan
     
    Give a man some Code and you shut him up for a day. Teach a man to code and you silence him for a lifetime.

    www.katoware.de

  3. #3
    Jörgi15 Tutorials.de Gastzugang
    Hi katoasan,

    nene, der Server läuft unter Linux!
    Ich hab oben nur Windows-Pfade gepostet, weil ich hier auf Windows entwickle (ich dachte das wäre für die Rückgabewerte egal...).

    Aber ich brauch es für ein Linux-System.


    Also, wenn ich das richtig verstehe, gibt exec(mysqldump ... , $fp); unter Linux etwas anderes zurück als unter Windows?
    Na super...
    Du sagst, wenn es geklappt hat, ist $fp nach der Ausführung unter Linux leer?
    Oder allgemein: Gibt es dasgleiche zurück, wie wenn ich mysqldump einfach auf der Shell ausführe?

    Zu der anderen Frage: Ich habe bereits ein Shell-Skript, das das erledigt, aber ich möchte den Code über ein PHP-basiertes GUI für den Anwender einfacher konfigurierbar machen.
    Wo genau siehst du da ein Sicherheitsproblem? Die Backups liegen außerhalb des Webroot...

    Viele Grüße

    Jörg
     

  4. #4
    Avatar von katosan
    katosan katosan ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    95
    Hi,

    exec, passthtru system machen einen call auf einen Systemfunktion daher kann in ungünstigen Fällen Anwender - Code im Kontext des Webserver - Users ausgeführt werden. Das ist solange kein Problem, wie man nur nette Anweder hat

    Du sagst, wenn es geklappt hat, ist $fp nach der Ausführung unter Linux leer?
    na das kommt auf die Parameter an eine Vobose - Flag macht auch $fp voll

    Oder allgemein: Gibt es dasgleiche zurück, wie wenn ich mysqldump einfach auf der Shell ausführe?
    Ja

    wenn es ein linuxsystem ist würde ich das Backup immer als cron laufen lassen. Vor allem kann das in eine rechtelosen Useraccount laufen.

    Zu der anderen Frage: Ich habe bereits ein Shell-Skript, das das erledigt, aber ich möchte den Code über ein PHP-basiertes GUI für den Anwender einfacher konfigurierbar machen.
    warum schreibst du die nicht in die DB dann kann das Backupscript die da auslesen Zugriff auf die DB hat es ja eh.

    Gruß

    katosan
     
    Give a man some Code and you shut him up for a day. Teach a man to code and you silence him for a lifetime.

    www.katoware.de

  5. #5
    Jörgi15 Tutorials.de Gastzugang
    Danke!

    na das kommt auf die Parameter an eine Vobose - Flag macht auch $fp voll
    Wenn ich "mysqldump -v" verwende, werden alle möglichen Infos ausgegeben, aber so detailliert brauch ich es eigentlich gar nicht. Mir reicht es, den Fall "Alles OK" von "Irgendein Fehler" unterscheiden zu können.

    mysqldump gibt ohne den Parameter -v auf der Shell unter Linux folgendes aus:
    - Wenn Host, DB-Benutzer oder Passwort falsch sind: "mysqldump: Got error 1045: Access denied for user..."
    - Wenn falscher Datenbankname: "mysqldump: Got error: 1044: Access denied for user..."
    - Wenn alles OK: nichts.

    Also müsste es klappen, wenn ich exec('mysqldump...', $fp); nutze und dann prüfe, ob $fp leer ist:
    PHP-Code:
    $fp '';
    exec('mysqldump -h ......'$fp);

    if(empty(
    $fp)) {
      return 
    TRUE# alles OK
    } else {
      return 
    FALSE# Fehler!


    warum schreibst du die nicht in die DB dann kann das Backupscript die da auslesen Zugriff auf die DB hat es ja eh. ... Das ist solange kein Problem, wie man nur nette Anweder hat
    Was soll ich in die DB schreiben? Das Skript liest alle Angaben für den mysqldump-Aufruf aus einer Konfigurationsdatei ein. Da kann der Benutzer nichts verändern.
    Der Benutzer soll nur noch den Zeitpunkt bzw. die Häufigkeit festlegen können.
    Das sollte doch kein Problem sein, oder?
     

  6. #6
    Avatar von katosan
    katosan katosan ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    95
    Zitat Zitat von Jörgi15 Beitrag anzeigen

    Also müsste es klappen, wenn ich exec('mysqldump...', $fp); nutze und dann prüfe, ob
    jo eingentlich schon

    Zitat Zitat von Jörgi15 Beitrag anzeigen
    Was soll ich in die DB schreiben? Das Skript liest alle Angaben für den mysqldump-Aufruf aus einer Konfigurationsdatei ein. Da kann der Benutzer nichts verändern.
    Der Benutzer soll nur noch den Zeitpunkt bzw. die Häufigkeit festlegen können.
    Das sollte doch kein Problem sein, oder?
    na dann schreib das doch in die confdatei.
    das wäre auf jeden eine aubere lösung.
     
    Give a man some Code and you shut him up for a day. Teach a man to code and you silence him for a lifetime.

    www.katoware.de

  7. #7
    Jörgi15 Tutorials.de Gastzugang
    Jo, da steht es auch so schon drin, dafür ist die Datei schließlich da.

    Vielen Dank für Deine Hilfe!
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 28.08.08, 18:47
  2. exec / passthru
    Von Philipp_Frank im Forum PHP
    Antworten: 2
    Letzter Beitrag: 09.03.08, 23:11
  3. passthru / exec / system => psexec
    Von FritzTheCat im Forum PHP
    Antworten: 0
    Letzter Beitrag: 16.11.07, 15:41
  4. Antworten: 2
    Letzter Beitrag: 06.04.07, 10:43
  5. mysqldump exec() oder passthru()
    Von saimoto im Forum PHP
    Antworten: 1
    Letzter Beitrag: 02.09.04, 16:06