PHP
Von: Sebastian Moser, 12.7.2007 09:43 Uhr
Hallo.

Ich hab da mal wieder ein Problem.

Hab auf meiner Homepage eine Shoutbox, die Einträge der Shoutbox werden in shouts.txt geschrieben.

Jetzt möchte ich von dieser shouts.txt je Tag vier Backup-Dateien erstellen. z.B. um 24:00h, 06:00h, ...
Das Script soll einfach die Datei shouts.txt kopieren und den Dateinamen in date("d.m.Y") und date("H:i") _ shouts.txt umbenennen.

Ist das mit PHP möglich??

Falls ja, bitte um hilfestellung.

Grüße,
Sebastian



  1. Antwort von Efchen 0
    Re: PHP Script für Backup
    Jetzt möchte ich von dieser shouts.txt je Tag vier
    Backup-Dateien erstellen.

    Ist das mit PHP möglich??
    Prinzipiell wohl schon, nachdem meines Wissens PHP auch ohne Webserver einsetzbar ist.

    Aber das größere Problem ist das Starten des Scripts zu einem bestimmten Zeitpunkt. Das geht natürlich nicht über den Webserver, weil der ja nur Scripts ausführt, wenn sie von einem Besucher angefordert werden.

    Bei Unix-Webservern gibt es oftmals bei den Webspaces etwas dabei, was sich "Cronjob" nennt. Per Cron lassen sich zeitgesteuert Programme oder Scripts ausführen. Ob es sowas auch unter Windows gibt, entzieht sich meiner Kenntnis. Ob das Dein Webspace erlaubt, musst Du herausfinden.

    In die Crontab kannst Du dann sowas wie das eintragen:
    0 0,6,12,18 * * * /pfad/zum/webspace/scripts/backup_shoutbox

    Das wurde zu jeder Minute 0 und Stunde 0,6,12,18, also jeweils ab 0:00 alle 6 Stunden, das dort angegebene Script starten. Ich würde da (unter Unix) ein kleines Shellscript machen, das quasi sowas macht wie
    cp /pfad/zur/shoutbox.txt /pfad/zum/backupdir/shoutbox.txt.`date +'%d%m%y%H%M'`
    Das kopiert die Datei unter dem Namen shoutbox.txt.TTMMJJHHMM. Ist aber Unix-Shellscript und kein PHP, also wahrschienlich eigentlich keine Antwort für dieses Forum ;-)

    Immer lächeln!
    -Efchen
    3 Kommentare
    • Re^2: PHP Script für Backup
      Hallo Efchen. Prinzipiell wohl schon, nachdem meines Wissens PHP auch ohne
      Webserver einsetzbar ist.

      Aber das größere Problem ist das Starten des Scripts zu einem
      bestimmten Zeitpunkt. Das geht natürlich nicht über den
      Webserver, weil der ja nur Scripts ausführt, wenn sie von
      einem Besucher angefordert werden.
      dann wäre es aber meines erachtens am sinnvollsten, einfach den Codeteil in die index.php zu packen und bei jedem aufruf eines benutzers, wird eine backup-shoutbox.txt-datei erzeugt??

      Wäre dies dann möglich?? In die Crontab kannst Du dann sowas wie das eintragen:
      0 0,6,12,18 * * * /pfad/zum/webspace/scripts/backup_shoutbox

      Das wurde zu jeder Minute 0 und Stunde 0,6,12,18, also jeweils
      ab 0:00 alle 6 Stunden, das dort angegebene Script starten.
      Ich würde da (unter Unix) ein kleines Shellscript machen, das
      quasi sowas macht wie
      cp /pfad/zur/shoutbox.txt
      /pfad/zum/backupdir/shoutbox.txt.`date +'%d%m%y%H%M'`
      Das kopiert die Datei unter dem Namen shoutbox.txt.TTMMJJHHMM.
      Ist aber Unix-Shellscript und kein PHP, also wahrschienlich
      eigentlich keine Antwort für dieses Forum ;-)
      k...dann wird mir das ja eh nicht weiterhelfen, weder hab ich unix, noch kenntnisse. :/

      Grüße,
      Sebastian
    • von Efchen 0
      Re^3: PHP Script für Backup
      dann wäre es aber meines erachtens am sinnvollsten, einfach
      den Codeteil in die index.php zu packen und bei jedem aufruf
      eines benutzers, wird eine backup-shoutbox.txt-datei erzeugt??
      Das wäre zumindest eine Lösung. Aber wenn Du mit jedem Schreiben
      Deiner Shoutbox ein Backup mit dem selben Namen anlegst, ist das
      halt nicht mehr viel Backup. Zumindest nicht mehr so viel Backup,
      wie Deine 6-Stunden-Lösung. Wäre dies dann möglich??
      Ja. k...dann wird mir das ja eh nicht weiterhelfen, weder hab ich
      unix, noch kenntnisse. :/
      Die meisten Webspaces laufen unter Unix.
      Daraus schließe ich, dass Du das für Zuhause brauchst.
      Da ist dann das Backuppen vermutlich auch nicht sooo wichtig.

      Schönen Abend,
      -Efchen
    • Re^4: PHP Script für Backup
      hallo efchen.

      :Das wäre zumindest eine Lösung. Aber wenn Du mit jedem
      :Schreiben
      :Deiner Shoutbox ein Backup mit dem selben Namen anlegst, ist
      :das
      :halt nicht mehr viel Backup. Zumindest nicht mehr so viel
      : Backup,
      :wie Deine 6-Stunden-Lösung.

      nene...der name setzt sich dann aus datum, uhrzeit und shouts.txt zusammen...also die sind nie ident.

      :Die meisten Webspaces laufen unter Unix.
      :Daraus schließe ich, dass Du das für Zuhause brauchst.
      :Da ist dann das Backuppen vermutlich auch nicht sooo wichtig.

      nene...wird schon auf nem server liegen. also wäre deine lösung auch möglich.

      habe aber im mom. das script von johnny bravo und dominik in meinen quellcode eingefügt und es klappt spitze. :)

      grüße,
      sebastian
  2. Antwort von Dominik George 0
    Re: PHP Script für Backup
    Hallo,

    du könntest auch das Backup anstoßen, wenn das erste mal anch der geplanten Zeit jemand die Seite aufruft.

    /* --------- PHP-Code beginnt ------------------- */
    // Letzte gewünschte Stunde
    // Tag durch vier teilen und Rest von aktueller Zeit abziehen
    $lastbackuphour = date("G") - (date("G") % 4);

    // Dateiname nur mit Datum, Stunden und Minuten
    $backupfile = date("d.m.Y H:i").'_shouts.txt';

    // Backup noch nicht vorhanden? Dann kopieren.
    if (! file_exists($backupfile))
    copy('shouts.txt', $backupfile);
    /* --------- PHP-Code zu Ende ------------------- */

    Fiel mir gerade so spontan ein. Bite um kurze Rückmeldung, was du von der Idee hältst. Hab's nicht getestet, aber bin zuversichtlich, dass es klappt *g*.

    Grüße,
    Nik

    P.S.: Wenn in den 4 Stunden dazwischen niemand die Seite aufruft, läuft natürlich kein Backup. Macht auch keinen Sinn, denn dann hat sich die Shoutbox garantiert auch nicht geändert ...
    1 Kommentare
    • Re^2: PHP Script für Backup
      Hallo Dominik. du könntest auch das Backup anstoßen, wenn das erste mal anch
      der geplanten Zeit jemand die Seite aufruft.
      Ja deine Variante wäre für mein Backup-System auch möglich, denn warum backupen, wenn eh niemand drauf war.
      Danke für deine Lösung. :)

      Hat gut geklappt.

      Grüße,
      Sebastian /* --------- PHP-Code beginnt ------------------- */
      // Letzte gewünschte Stunde
      // Tag durch vier teilen und Rest von aktueller Zeit abziehen
      $lastbackuphour = date("G") - (date("G") % 4);

      // Dateiname nur mit Datum, Stunden und Minuten
      $backupfile = date("d.m.Y H:i").'_shouts.txt';

      // Backup noch nicht vorhanden? Dann kopieren.
      if (! file_exists($backupfile))
      copy('shouts.txt', $backupfile);
      /* --------- PHP-Code zu Ende ------------------- */

      Fiel mir gerade so spontan ein. Bite um kurze Rückmeldung, was
      du von der Idee hältst. Hab's nicht getestet, aber bin
      zuversichtlich, dass es klappt *g*.

      Grüße,
      Nik

      P.S.: Wenn in den 4 Stunden dazwischen niemand die Seite
      aufruft, läuft natürlich kein Backup. Macht auch keinen Sinn,
      denn dann hat sich die Shoutbox garantiert auch nicht geändert
      ...
  3. Antwort von Johnny Bravo 0
    Re: PHP Script für Backup
    Hallo!

    Füg mal in deine Index.php folgenden Code am Anfang ein:
    <?php
    echo $letztes_backup_Stunde=date(H)-date(H)%6; 
    if (!is_file("Backup_".$letztes_backup_Stunde."h_".date(y)."_".date(m)."_".date(d)."_shouts.txt")){
    	$fp=fopen('./shouts.txt', 'r'); 
    	$fp2=fopen("Backup_".$letztes_backup_Stunde."h_".date(y)."_".date(m)."_".date(d)."_shouts.txt", 'a');
    	while (!feof($fp)){
    	echo $read=fread($fp, 1024);
    	fwrite($fp2, $read);
    	}
    	fclose($fp);
    	fclose($fp2);
    }	
    ?>
    


    Dann wird beim öffnen der Seite ein Backup angelegt, es sein denn, dass schon eins in den letzten 6 Stunden angelegt wurde... [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
    4 Kommentare
    • Re^2: PHP Script für Backup
      Warum denn so umständlich? Der Code macht genau das Gleiche, wie der von mir gepostete, nur mit sehr viel mehr Aufwand ...
    • Re^2: PHP Script für Backup
      Hallo Johnny.

      Danke, dass du mir nochmals antwortest.

      :Füg mal in deine Index.php folgenden Code am Anfang ein:
      : <?php
      : echo $letztes_backup_Stunde=date(H)-date(H)%6;
      : if
      (!is_file("Backup_".$letztes_backup_Stunde."h_".date(y)."_".date(m)."_".date(d)."_shouts.txt")){
      : $fp=fopen('./shouts.txt', 'r');
      :$fp2=fopen("Backup_".$letztes_backup_Stunde."h_".date(y)."_".date(m)."_".date(d)."_shouts.txt",
      'a');
      :while (!feof($fp)){
      :echo $read=fread($fp, 1024);
      :fwrite($fp2, $read);
      :}
      :fclose($fp);
      :fclose($fp2);
      :}
      :?>
      :Dann wird beim öffnen der Seite ein Backup angelegt, es sein
      :denn, dass schon eins in den letzten 6 Stunden angelegt
      :wurde...

      Stimmt...es funktioniert. Das nächste backup wird dann in 6h wieder ausgeführt?? (sofern, jemand drauf geht) :)

      Schön wäre auch noch, wenn die Datei nach dem fwrite in den ordner ./shoutbox/backup verschoben wird...gibts da eine Function / Methode ?

      Grüße,
      Sebastian
    • Re^3: PHP Script für Backup
      Ja, du kannst einfach bei $fp2 folgendes ein:

      $fp2=fopen("./shoutbox/backup/Backup_".$letztes_backup_Stunde."h_".date(y)."_".date(m)."_".date(d)."_shouts.txt", 'a');
      Besser wäre es noch, wenn du dich an den Vorschlag von Dominic G. halten würdest. Ich hab den Code mal dementsprechend umgeschrieben:

      <?php
      $letztes_backup_Stunde=date(H)-date(H)%6;
      $backup="./shoutbox/backup/Backup_".$letztes_backup_Stunde."h_".date(y)."_".date(m)."_".date(d)."_shouts.txt";
      if (!is_file($backup))
      copy('shouts.txt', $backup);
      ?> [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
    • Re^4: PHP Script für Backup
      Hallo Johnny.

      musste noch eine pfad ändern und es hat geklappt.

      hier die fertige lösung:
      <?php
      $letztes_backup_Stunde=date(H)-date(H)%6;
      $backup="./shoutbox/backup/Backup_".$letztes_backup_Stunde."h_".date(y)."_".date(m)."_".date(d)."_shouts.txt";
      if (!is_file($backup))
      copy('./shoutbox/shouts.txt', $backup);
      ?>

      danke für deine hilfe.

      grüße,
      sebastian