PHP Script für Backup

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

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 :wink:

Immer lächeln!
-Efchen

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 :wink:

k…dann wird mir das ja eh nicht weiterhelfen, weder hab ich unix, noch kenntnisse. :confused:

Grüße,
Sebastian

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 …

Hallo!

Füg mal in deine Index.php folgenden Code am Anfang ein:

<?php echo $letztes_backup_Stunde=date(H)-date(H)%6; <br />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]

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. :confused:

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

Warum denn so umständlich? Der Code macht genau das Gleiche, wie der von mir gepostete, nur mit sehr viel mehr Aufwand …

hallo efchen.

:smiley:as wäre zumindest eine Lösung. Aber wenn Du mit jedem
:Schreiben
:smiley:einer 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.

:smiley:ie meisten Webspaces laufen unter Unix.
:smiley:araus schließe ich, dass Du das für Zuhause brauchst.
:smiley:a 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. :smile:

grüße,
sebastian

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. :smile:

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

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‘);
:blush: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);
:}
:?>
:smiley:ann 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) :smile:

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

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]

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