Tar/Zip mit PHP erstellen

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Hallo,

Ich möchte mir ein Skript bauen, dass mir ein Zip des Inhalteordners auf meiner Homepage macht. Da es ein CMS ist und die Leute da dann alles löschen könnten, will ich Backups machen.

Ich habe bei mir auf einem Linuxsystem Zuhause (Root-Zugriff) Tar installiert und konnte dann ein Archiv erstellen.

Auf meinem Strato-Webserver gibt folgender Befehl nicht zurück, auch keine Datei:
PHP:
echo exec('tar -cf backup-' . time() . '.tar ../inhalte');

Laut Tar --help habe ich alles richtig gemacht:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.

Ist das der Server oder mache ich was falsch?

Ich teste das gleich mal aufm Ubuntu aus, vielleicht klappt das da.

Martin
 
Okay, aufm Ubuntu klappt es, allerdings bekomme ich dann von PHP folgende Meldung:
Code:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 3629277 bytes) in /home/martin/public_html/schulhp/admin/backup.php on line 29

In der Datei steht da:
PHP:
28: $dateiinhalt = fread(fopen($dateiname, "r"), filesize($dateiname)); 
29: $header .= chunk_split(base64_encode($dateiinhalt));

Was tun?
 
Wenn der Provider das nicht erlaubt, dann kann ich das nicht per Email versenden, oder?

Dann lass ich das mit der Email, dann speichere ich die Backups einfach nur in einen Ordner, das muss auch reichen.

Aber warum kann ich aufm Mac und aufm Ubuntu ein einwandfreies Archiv erzeugen und nicht auf meinem Server?
 
was das mit e-mail zutun haben sollte, ist mir jetzt nicht klar. was aber sein kann: manche provider erlauben keine ini_set einstellungen bzgl. memory.

wenn du dich mit PEAR auskennst, könntest du dort mal nach einer klasse suchen, die tar-funktionen bereitstellt. es gibt da eine. allerdings sollte dein weg durchaus funktionieren.
 
ein weiterer grund könnte sein: evtl. ist der "exec"-befehl beim provider deaktiviert. du müsstest da mal direkt fragen.
 
Ich habe vergessen zu sagen, dass ich mir die Backups zuerst als Emails schicken lassen wollte.

Allerdings hat das auch wieder Nachteile, das auf dem Server zu belassen ist sicher praktischer.

Mit PEAR kenne ich mich überhaupt nicht aus, ich weiß nur, dass das was mit PHP zu tun hat.

Ich denke, der deaktivierte exec ist das Problem, da da nix passiert.

Ohne Exec muss ich das dann per FTP machen, aber automatisch fände ich deutlich besser.

Martin
 
Ich habe denen jetzt mal ne Email geschickt, vielleicht können die mir was passendes sagen.

Martin
 
Schreib dir doch ein Perl/bash/PHP-CLI script auf deinem lokalen Linux Rechner, das sich per FTP einloggt und die Verzeichnisse runterlädt (mittel pipe evtl. gleich packen) und lass es automatisch per Cron ausführen.
 
Ich habe jetzt erstmal denen eine Email geschickt, vielleicht geht das ja auf dem neuen Server, auf den wir demnächst umziehen.

Wenn das da auch nicht geht, lass ich mir was einfallen, das ließe sich ja sogar per Automator machen.

Wie kann ich ein MySql-Dump machen? Ich habe das jetzt mal mit dem Konsolentool "mysqldump" ausprobiert, allerdings kann das ja ins Wasser fallen, wenn exec nicht geht. Gibt es auch eine Möglichkeit das mit PHP zu machen?

Martin
 
hast du schon mal dran gedacht, das per shell-skript / cron zu machen? das scheint sinnvoller zu sein. wenn dein provider shell-skripte und crons erlaubt, könntest du dir ein skript schreiben, dass die ordner und die datenbank regelmäßig sichert.

das wäre ein zweizeiler! (eine zahl tar und eine zeile mysqldump)
 
Cronjob kostet 12€ im Jahr, deshalb wollte ich das anders lösen. Shellscripte weiß ich nicht. Ansonsten gute Idee.

Ich glaube, ich brauch irgendwann man meinen eigenen Root-Server.

Martin
 
12 € im Jahr fuer ein Backup? Das ist 1 € im Monat... Also ein Backup waer mir das schon wert; v.a. kannst du per cron ja noch ein paar praktische Sachen machen, auf die du vielleicht in Zukunft Wert legst, oder? :rolleyes:
 
Wenn das mit den Skripten dann geht, ist das eine Überlegung wert.

Martin
 
martinibook schrieb:
Wenn das mit den Skripten dann geht, ist das eine Überlegung wert.

Martin

du musst fragen, ob du per cron-job shell-skripten ausführen darfst.

bei deiner anfrage solltest du dann die entsprechenden zeilen des skripts deinem provider zeigen.

ich vermute mal, dass du das mit wenigen zeilen erledigen kannst...

z.B. so für das mysql-backup:


Code:
curtime="`date "+%Y%m%d%H%M"`"
mysqldump -Aa > $curtime.sql
tar cvzf $curtime.tar.gz $curtime.sql > /dev/null
rm $curtime.sql

du kannst dir das wie ein "makro" für shell-eingaben vorstellen - also so, als ob du die befehle selber auf der shell tippen würdest.

mach das mal, das lohnt sich.
 
Code:
cd pfad

tar -cf backup-`date +%s`.tar inhalte
mv backup* admin/backup/

cd admin/backup
/pfad/mysqldump --add-drop-table -c -u root -pPASSWORT TABELLE > mysqldump-`date +%s`.sql

So habe ich das gemacht, der Provider sagt, dass Tar und mysqldump da seinen und freigeschaltet.

Martin
 
Jupp, ich habe aus deinem Skript noch das mit der Variablen eingefügt, damit die beide gleich heissen, das Ergebnis sieht dann so aus:

attachment.php


Martin
 

Anhänge

  • backup.png
    backup.png
    43,2 KB · Aufrufe: 134
martinibook schrieb:
Jupp, ich habe aus deinem Skript noch das mit der Variablen eingefügt, damit die beide gleich heissen, das Ergebnis sieht dann so aus

du könntest vielleicht aus dem unix-timestamp noch ein "human readable" format machen - das erleichter die suche nach versionständen. in dem "shellskript" von findest du die syntax dazu.
 
Wenn man das mit einem Timestamp am Anfang macht, kann man die einfacher sortieren. Das Datum wird ja Human-Readable auf der Backup-Seite der Homepage angezeigt. Deshalb halte ich den Timestamp aus technischer Hinsicht praktischer.

Martin
 
Zurück
Oben Unten