Dieser Beitrag ist eine Ergänzung bzw. Erweiterung des vorherigen Posts „FTP-Backup-Lösung mit PHP“. Die große Neuerung der Version 1.2 ist die Funktion MySQL Datenbanken sichern zu können. Auch hier wird ein Backup erstellt, überschüssige Backups (wenn mehr vorhanden sind als der gewünschte Maximalwert) werden gelöscht und neue Backups ggf. zu einem externen Server übertragen. Mit Version 1.2.1 gibt es zusätzlich die Möglichkeit, ALLE Ordner der Root-Ebene, mit Ausnahmen, zu sichern und Version 1.2.2 ermöglicht detailliertere Ausnahmen. In Version 1.3 wird das Backup mittels eines weiteren Skripts aufgerufen. Mehr dazu weiter unten.
Features
Diese Lösung (v1.3) bietet nun folgenden Funktionsumfang:
- beliebig viele Ordner des All-Inkl Accounts in einzelne .tar.gz Archive sichern
- oder: alle Ordner der Root-Ebene, mit möglichen Ausnahmen, sichern
- Detailliertere Ausnahmen mit Datei- und Ordnermasken wie z.B. „*.tar.gz“
- Einschränkung der Anzahl aufgehobener Backups – älteste Backups werden automatisch gelöscht
- detaillierte Ausgabe inklusive benötigter Zeit
- E-Mail Benachrichtigung
- Farbliche Hervorhebung
- Verbesserungen des Backup Prozesses, zusätzliche Überprüfungen und Debug Infos bei Fehlern
- Verbinden eines externen FTP Server und Kopieren aller neuen Backups
- Angabe eines beliebigen FTP Ports
- Verbindung über FTPs (SSL FTP) Port 21 wird verwendet, unsicheres FTP nur noch als Fallback
- detailliertere Informationen über die Backups in der Benachrichtigungsmail
- Backup von beliebig vielen MySQL Datenbanken von localhost, Aufräumen der Backups und Export an externen Server
- E-Mail Anpassungen über Parameter möglich – Betreff, Anmerkungen, Details
- ausführliche Ausgabe aller Backups im Skript und per Mail
Zwischen den Zeilen 37 und 82 findet ihr alle Variablen, die ihr anpassen müsst/könnt.
Zur Datenbanksicherung ist zu sagen, dass diese auf den Hoster All-Inkl optimiert ist. Sie sichert nur Datenbanken von localhost und benötigt den PHP Befehl „exec()“ sowie die Komponenten „mysqldump“ und „gzip“, die auf All-Inkl Servern erlaubt bzw. installiert sind. Auf anderen Hostern müssen daher ggf. diese Möglichkeiten geschaffen oder die MySQL Sicherung (Zeile 190-191) verändert werden.
Update 03/2020: Blogleser Crunchy hat mich netterweise darauf hingewiesen, dass durch den Wegfall des apache-mode die Skriptausführungszeit nun auf 10 Minuten begrenzt ist. Daher ist es nun sinnvoll, das Backupskript über ein zweites Skript aufzurufen. All-Inkl gibt das Format grob vor und ich habe unten im Download ein solches Aufruf-Skript auch mit eingefügt. Ladet euch also beide Skripte und richtet euch einen Cronjob mit dem Aufruf-Skript init-backup.php ein.
Screenshot
Code
Update 08.2017: Version 1.2.2 nur noch als Download
Update 03.2020: Version 1.3, init-backup.php hinzugefügt und kleinere Fehler im Backup-Skript behoben
Code/Download der init-backup.php
Code/Download der backup.php
Sicherheit: Absicherung mit .htpasswd
Das Verzeichnis, in dem die backup.php und die Backups liegen, sollte natürlich mit einer .htpasswd abgesichert werden. Mit einer eingerichteten .htpasswd Datei ist zuerst ein Login nötig, eh man auf bestimmte Bereiche des Webspaces zugreifen darf:
Die Datei .htpasswd enthält hierbei die Login Daten und in der .htaccess des Backup Unterordners wird festgelegt, dass eine .htpasswd diesen Ordner schützt. Die .htpasswd generiert ihr euch am besten mit diesem Generator und baut sie dann folgendermaßen in die .htaccess dieses Ordners ein:
AuthType Basic AuthName "Backups" AuthUserFile /www/htdocs/all-inkl-account/backup/.htpasswd Require valid-user
Sicherheit: Absicherung mit .htaccess
Da wir schonmal bei .htaccess sind, erhöhen wir die Sicherheit mit ein paar weiteren grundlegenden Zeilen:
#block access to certain file types <FilesMatch ".(htaccess|htpasswd|ini|phps|log|sh|tar.gz)
quot;>
Order Allow,Deny
Deny from all
</FilesMatch>
# disable directory browsing
Options All -Indexes
# prevent basic url hacking stuff
# from: http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips
RewriteEngine On
# proc/self/environ? no way!
RewriteCond %{QUERY_STRING} proc/self/environ [OR]
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ /index.htm [F,L]
ErrorDocument 401 /backup/index.htm
ErrorDocument 403 /backup/index.htm
ErrorDocument 404 /backup/index.htm
ErrorDocument 500 /backup/index.htm
Dadurch werden Zugriffe auf bestimmte Dateitypen (auch die Backup Dateien), Verzeichnisse und Zugriffe mit sicherheitskritischen Merkmalen unterbunden. Alle diese nicht validen Zugriffe bekommen die index.htm serviert, welches einfach nur eine leere HTML Datei ist. Somit wird den Abfragenden auch kein detaillierter Grund gegeben, warum der Zugriff fehlschlug.
Automatisierung mit All-Inkl Cronjobs
Zu guter Letzt hilft diese Sicherungslösung natürlich nur, wenn sie automatisiert wird. Auch dies ist stark abhängig von eurem Hoster, System, dem Anwendungsbereich usw.
Im Falle von All-Inkl als Webhoster, könnt ihr die Cronjob Funktionalität im KAS (KAS -> Tools -> Cronjobs) benutzen:
ACHTUNG: Richtet euch den Cronjob bitte für die init-backup.php ein, nicht für die backup.php. Siehe Update von 03/2020 oben.
Zwar alles sehr technisch für mich, aber mit dieser grandiosen Anleitung hab ich die Absicherung der .htacess hinbekommen.
Ich danke viel viel mals, danach habe ich gesucht und lange gesucht. Endlich gefunden. Du erklärst sogar alles genau bei dem Anbieter bei dem ich auch bin All inkl.
ich werde mir deinen Beitrag schnappen und ein Review drüber schreiben da ich dein tool bzw script genial finde thanks.
Eigentlich das was ich gesucht habe, jedoch beim Testlauf bekomme ich eine Fehlermeldung:
Parse error: syntax error, unexpected ‚[‚ in
und komme daher nicht weiter.
Vielen Dank für die Bereitstellung des Scripts, leider kommt es beim Aufruf zu folgender Fehlermeldung (Hoster: All-Inkl, PHP 7.014):
Parse error: syntax error, unexpected ‚<', expecting end of file in /www/htdocs/xxxx/backup/backup.phpx on line 331
Danke im Voraus für Deine Hilfe und LG.
Hallo Peter,
unerwartetes Dateiende. ich vermute, dass beim kopieren oder übertragen des Scripts etwas schief gelaufen ist.
Prüfe mal mittels webftp-Zugang den Inhalt des hochgeladenen Scriptes und ersetze diesen ggf. mit dem kompletten Script-Inhalt von oben.
Gruß Chrunchy
Hallo Guido, das sollte natürlich nicht passieren. Ich kann mich voraussichtlich erst Ende der Woche darum kümmern, werde aber den Fehler versuchen nachzuvollziehen und zu beheben. Kannst du mir bitte nochmal die komplette Fehlermeldung inklusive Screenshot schicken und an welcher Stelle der Fehler aufgetreten ist?
Danke
Fehlermeldung:
Parse error: syntax error, unexpected ‚[‚ in /www/htdocs/123456/backup/wert/backup.php on line 365
Danke für Deine Mühen!
Hallo Guido,
ich habe bei mir das Backup nochmal seperat eingerichtet, um es zu testen. So der Ablauf:
$ftpFoldersToBackup = array(„dev___test“, „feed2___test 2″);
$copyToExternalFtp = 0;
$backupMysqlData = 0;
$dir = $pfad.“backup/test/“;
Ich kriege da also kein Fehler. Damit würde ich den Fehler bei deinem Code oder Hoster vermuten.
1.) Zeig mir mal bitte deine Zeilen 360-370 mit 365 fett markiert.
2.) Bei welchem Hoster bist du?
LG
Also schauen wir mal:
Neues Verzeichnis im root – hab ich
code original aus
http://hannes-schurig.de/09/06/2015/backup-loesung-fuer-ftp-und-mysql-in-php/
raus kopiert
in eine leere phpx reinkopiert
Code angepasst:
// ########## EDIT HERE ###################
// ### FTP Data
// which root folders should get backed up? comment is optional
// format: „foldername___comment“
// or: „foldername“
$ftpFoldersToBackup = array(„test“);
$copyToExternalFtp = 0; // copy new backup files to external ftp server? should be 1/“yes“/“ja“ or 0/“no“/“nein“
// external (ftp) servers to copy new backups to, format:
// in general: ftp://username:password@url:port/path (port is required!)
// ftp://user:pw@ftp.server.com:21/
// ftp://user:pw@serverurl.com:21/optional/path
$externalFtpUri = „ftp://admin:password@barketing.dns.com:21/Data/FTP-Backups“;
// ### MySQL Data
$backupMysqlData = 0;
// one or more databases of the local mysql server to backup, multiple data combined with „___“, comment is optional
// format: „dbName___dbUser___dbPassword___comment“
// or: „dbName___dbUser___dbPassword“
$databasesToBackup = array(
„d01ce064___d01ce064___password___main website DB“,
„d01d7131___d01d7131___password“
);
// ### Mailing Data
$sendMail = 0; // send notification mail when all backups are done – should be 1/“yes“/“ja“ or 0/“no“/“nein“
$mailTo = „schurigh@gmail.com“; // valid mail address to send the mail to
$mailSubject = „Automatische FTP Sicherung abgeschlossen“; // mail subject
// additional mail annotations that gets inserted after the main mail content
$mailAdditionalNotes = „Hiermit kann – wenn gewünscht – zusätzlicher Text in die Mail eingebaut werden.“;
$mailBackupDetails = 1; // send information about successful backup files? should be 1/“yes“/“ja“ or 0/“no“/“nein“
// ### General Options
$backupFileMaximum = 2; // how many archives should be stored?
$dir = $pfad.“test/“; // in which subfolder is this backup php file? this would be: „root/backup/“
// ######### STOP EDITING HERE ###################
Gestartet…….
Sofort Fehlermedung:
Parse error: syntax error, unexpected ‚[‚ in /www/htdocs/w007d6c2/backup/backup.php on line 365
Die Zeile 365 ist die Originalzeile aus Deinem Skript
pathinfo($file)[„extension“] == $fileType &&
Gehostet ist die Kiste bei all-inkl.de
LG
Hallo Hannes,
erst mal vielen Dank für deine Scripte auf der Seite. So was habe ich gesucht und zum Glück bei dir gefunden. Mein Hoster ist auch all-inkl, daher kann ich die gut gebrauchen. Ich habe nur jetzt nur Probleme, das backup script läuft nicht ganz und bei der kompletten htaccess habe ich Probleme.
Backscrip hat bei der Datenbank folgenden Fehler:
Warning: exec() has been disabled for security reasons in
Und bei der kompletten htaccess:
habe ich immer folgenden Fehler:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator,
Kannst du mir vielleicht weiter helfen?
Danke dir
LG
Stingrays
Mein Post hat sich erledigt. Funktioniert alles wunderbar.
Hast du irgendwo einen eigenen Fehler entdeckt? Kannst du den Lesern hier irgendwelche Tipps, Hinweise oder Hilfen geben, die vielleicht in Zukunft Probleme wie deines vermeiden?
Hallo,
da bin ich dann noch mal. Hast recht vielleicht ist ja noch jemand blind und macht nicht alles genau nach Anweisung.
In deinem Script habe ich keine Fehler gefunden, sondern ich habe den Fehler begangen und die Seite nicht backup.phpx genannt sondern backup.php und das ist bei allinkl falsch, wenn man exec() nutzen möchte. Sonst habe ich jetzt alles umgesetzt was in deinem Script steht und auch die .htaccess habe ich so eingerichtet und bis jetzt kommt keine Fehlermeldung. Klappt alles bestens auch das mit SyncBack. Bin begeistert denn das erspart mir eine Menge Arbeit und Zeit.
Hallo Hannes,
vielen Dank für Deine Backup-PHP Scripte.
Ist es mit Version 1.2 Deines Scriptes auch möglich, den kompletten Webspace zu sichern?
in Zeile 040 Deines Scriptes werden die einzelnen Folder
definiert.
Gerne möchte ich jedoch alle Folder „root/*“ auf meiner Seite sichern, mit Ausnahme der unter Zeile 105
definierten Folder.
Wie/was muss ich hierzu anpassen?
Da ich die Option
deaktiviert habe, ist es möglich, in Deiner Beachrichtigungsemail
welche beim erfolgreichem erstellen der Backups per email versandt werden, die Dateinamen auf die tatsächlichen Backupdateien zu verlinken? So dass beim anklicken dieser Links ein Download dieser Files nach Authentifizierung erfolgen kann?
Zu guter letzt: Werden die Datenbankdumps auch per FTP übertragen? Wenn die Option
aktiviert wurde?
Viele Grüße
Martin
Also, ich hab mich mal kurz hingesetzt und zwei Ergänzungen programmiert: alle Root-Ordner sichern sowie Excludes ermöglichen.
Hier nur die Änderungen, die du in deinem Script einbauen kannst; im Artikel ist der Code ebenfalls aktualisiert.
Vor
einbauen:
Vor
einbauen:
Die Sachen mit dem verlinkten Text in der Mail hätte jetzt eine größere Umprogrammierung einer Funktion benötigt. Wenn du möchtest, kannst du dich gerne selber damit beschäftigen,
enthält den Code, der dann sowohl in die Mail als auch in den HTML Bericht beim direkten Aufruf der .phpx eingefügt wird. Dort müsste man es bei
irgendwie reinfriemeln aber dafür muss man die Schleifen ändern, die Spalten analysieren, die Datei-/Ordner-Pfade mit in das Array geben usw. – also einige Änderungen, die ne Weile dauern. Sorry.
LG
ich hoffe es klappt wäre geniale lösung
eine frage zu diesem ftp external backup i habe einen qnap nas und die ddns ist myqnapcloud.com
ich denke ich habe alles richtig wie kann ich das aber testen ob es funzt ???
und ich möchte gerne die datenbanken sichern aber ich muss nirgends login oder so etwas eingeben macht das script das automatisch ? bin auch auf all inkl
und bei ordner strutur die so lautet:
root/backup1/backup2
er sichert den ordner backup1 aber auch die unterordner mit datenbank ?
irgend etwas stimmt mit dem zusatz für die htaccess nicht. wenn ich diesen einfüge beomme ich sofort einen 500 server error.
wenn ich die htaccess via all inkl verzeichnis schutz erstelle funktioniert alles sofern ich den zusatz mit einbaue geht es nicht.
außerdem backupt das script leider nur 2 datenbanken ich habe aber um die 20 datenbanken wo kann da der fehler sein?
wenn man aus den kommentaren den code der htaccess nutzt geht es
nach rumbasteln geht nun alles. einzig die datenbanken werden nicht gesichert. zwar werden 2 datenbanken gesichert ich finde diese aber weder in meinem kas.all… noch wo anders. und die datenbanken meiner webseiten werden nicht gesichert. warum ?
war mein fehler also meine letzten koments können gelöscht werden
aber ich habe dennoch einen fehler
was mag das sein ??
Hallo bill,
ich lösche für gewöhnlich keine solche Kommentare. Jeder Fehler, den ein Leser macht, kann auch von einem anderen Leser gemacht werden. Von daher wäre es hilfreicher, wenn du mir zu jedem deiner Kommentar kurz schreiben könntest, was das Problem war und wie du es dann gelöst hast. Irgendeine Codezeile nicht angepasst, eine Einstellung vergessen, was können die anderen Leser beachten, wenn sie die gleichen Fehler bekommen?
Zu deinen letzten Fehlern: das scheint eher am FTP-Server, deiner Firewall oder der Server/NAS-Konfig zu liegen als am Code.
Schau dir mal diese Artikel und diese Google Suche an. Vielleicht hilft dir das weiter.
Also zu dem Fehler 1 mit den Datenbanken
Lösung : die einzelnen Datenbanken müssen mit Name dB login dB password in den Code geschrieben werden. Sonst werden diese nicht gesichert die 2 Datenbanken die immer gesichert werden sind die Demo Datenbanken aus dem Script die existieren ja bei uns Usern nicht
Fehler 2 htaccess
Ich habe den Code der htaccess eines Kommentares genommen damit ging alles
Außerdem cache löschen wenn man die htaccess erstellt hat Bülow inkognito Fenster aufmachen
Fehler 3
Ftp ich vermute auch das es an den Einstellungen meiner nas liegt weiß aber nicht wo ich dort was einstellen muss
Fehler 4
Unterordnen unterordnen
Also Ordner in Ordner werden gesichert als der übergeordnetrn Ordner wäre toll wenn man dem Script sagen kann aus dem Ordner Tools sichere Ordner 1 aber nicht zwei oder 1 und 2 aber einzelne
Das Script sichert bislang den gesamten Tools Ordner mit allem was drin ist
Zu Problem 1:
Ja natürlich müssen die 2 im Code enthaltenen Datenbanken gelöscht werden – das sollen ja nur Beispiele sein. Ich habe den Code im Artikel an der Stelle nochmal angepasst, damit das noch deutlicher wird.
In den zwei Zeilen über diesen Datenbankangaben steht das Format aber extra nochmal als Gerüst:
Noch einfacher kriege ich das nicht beschrieben, glaube ich.
Problem 2:
Das lag wohl am Encoding des Blogbeitrags – HTML Entities wurden leider umgewandelt und so wurde aus “ ein ".
Ich habe das korrigiert und jetzt müsste man es 1:1 kopieren können.
Problem 3:
Das kann ich dir leider nicht sagen. Das Sichern der Backups auf mein NAS (Synology) funktioniert problemfrei. Dort habe ich am FTP Protokoll damals aber auch ne Menge gefummelt.
Problem 4: Du meinst du willst Datei- oder Ordnerausschlüsse beim Backup? Die Möglichkeit gab es bereits, sie war jedoch etwas versteckt. Ich habe die entsprechende Zeile in den Config-Bereich nach oben gezogen. In Zeile 53 stehen jetzt Komma-seperiert Datei- und Ordnermasken zum Ausschließen.
LG
also ich bekomme es einfach nicht zum laufen also die ftp verbindung
es kommt immer : Stelle (FTPs über SSL – Port 21) Verbindung zu FTP Server hdddcloud.com her…
Verbindung hergestellt, Login erfolgreich, passiver Modus aktiviert, Verzeichniswechsel zu /Windows/backddeb/ erfolgreich.
15 FTP Backups werden auf externen FTP kopiert…
Kopiere FTP_addddentskdddder_2016-04-18_200934.tar.gz (Größe: 69.1 MB MB) auf den http://FTP...
Warning: ftp_put(): php_connect_nonb() failed: Operation now in progress (115) in /www/htdocs/w01ddddb/backup/ftp-backup.phpx on line 545
Warning: ftp_put(): Type set to A in /www/htdocs/w01ddddd6b/backup/ftp-backup.phpx on line 545
weiß einfach nicht was ich machen soll 🙁
Vielen herzlichen Dank,
das ist das Backupscript für all-inkl.com, welches ich immer gesucht habe.
Sorry, wie kann man die zuvor erstellten – alten Backups über das Script löschen lassen. Finde die Einstellung leider nicht, Danke.
Sollte diese Einstellung sein
$backupFileMaximum = 2; // how many archives should be stored?
Genau, $backupFileMaximum auf 0 oder 1 sollte dafür sorgen, dass alte Backups gelöscht werden. Mal probieren.
für alle die auch das problem haben wie ich, backupauf einen externen ftp ( mein QNAP NAS ) funktioniert nicht.
Ich habe die funktion RTRR Zweiweg Synchronisierung des QNAP NAS genutzt.
Dort wird direkt der FTP eingetragen von ALL INkl oder anderem FTP und die NAS zieht sich dann den Backup ordner.
so schickt das script nicht auf den FTP sondern der NAS zieht sich den Ordner vom FTP
ich noch einmal. was müsste geändert werden damit ich zwei backups anlegen kann. einmal wöchentlich undmonatlich.
klar zwei cronjobs
aber wie kann ich einen ordner erzeugen wo woche und einen monatliche backups drin sind?
habe gerade im folder backup/backupmonatlich erstellt dort die phpx datei hinein kopiert. bekomme aber einen fehler das kein backup erstellt werden kann
sicherlich wegen dem pfad wo trage ich den weiteren folder ein?
Ich bekomme eine Fehlermeldung:
Parse error: syntax error, unexpected ‚[‚ in /www/htdocs/backup/backup.phpx on line 384
Hallo gamma, ist Zeile 384 bei dir auch
so wie in meinem Originalcode oder um welche Zeile handelt es sich?
Welche PHP Version läuft auf deinem Server?
Ja, genau. PHP Version 5.2.17-nmm4
Hat jemand bemerkt das bei den Datenbanken keine Kommentare angehangen werden auch wenn man diese angibt?
Meine dB haben alle nur die Nummer man findet schwer raus welche Seite es ist
Hallo Bill,
das stimmt, wenn du den Dateinamen meinst. Dieser wird nur aus dem Datum gebildet:
Das Kommentar wird nur in die „Berichterstattung“ (Feedbacktext, E-Mail) eingebaut. Wenn du das auch im Dateinamen haben willst, ginge das in etwa so:
(nicht getestet)
Mit dem Kommentar bei den Datenbanken geht es ähnlich – mit explode trennst du die Bestandteile am „___“ auf und holst es es in den Dateinamen.
LG
Bzgl. des nachfolgendes Fehler:
Parse error: syntax error, unexpected ‚[‚ in /www/htdocs/backup/backup.phpx on line 384
Bei mir habe ich die Zeile wie folgt ersetzt:
pathinfo($file, PATHINFO_EXTENSION) == $fileType &&
Damit funktioniert es.
Ich habe aber auch noch ein Problem,
bei mir gibt es Verzeichnisse, welche gesichert werden sollen, wo ich mit dem 10 Minuten Script-Timeout nicht klar komme.
All-inkl-Support sagt, ich könne versuchen vorm Timeout Ausgaben des Scriptes zu generieren.
Es stehen eine Menge flush(); Anweisungen im Script, bei mir erfolgt die Ausgabe aber erst wenn das Script komplett durchgelaufen ist.
Hat hier jemand eine Idee, wie ich das ändern kann?
@Bill,
$sqlFile = „DB_$dbName“.date(‚_Y-m-d_His‘).“_“.$dbComment.“.sql“;
das schreibt den Kommentar aus dem zu sichernden DB-Array auch in den Dateinamen.
HTH
kann man irgendwie auch das script so erstellen das ich zum einen jeden tag db sicherung mache aber nur jede woche ein ftp ??
bzw kann ich irgendwie zwei der backup scripts ausführen ich habs probiert aber irgendwie klappt das nicht so
da ich es echt satt habe mit den ganzen backup plugins für wordpress die so wie so bei all inkl nie richtig funzen
@bill,
du könntest z.B. den Wochentag abfragen ($tag=date(„w“)) und in Abhängigkeit des Ergebnisses die ftp-Backup-Parameter setzten.
HTH
@bill: Kamst du mit der Hilfe von Chrunchy ans Ziel? Falls nicht, melde dich nochmal bei mir, dann kriegen wir das noch hin.
LG
Ne leider nicht bin nicht so der Programmierer. Wäre also auf Hilfe angewiesen
Hi Billy, entschuldige die späte Antwort. Es ist eigentlich ziemlich einfach, aber Weihnachten, Silvester… ich kam nicht recht dazu.
Also, mit PHP kann man relativ einfach den aktuellen Tag rausfiltern – du kannst also vor einer FTP-Sicherung erst den Wochentag abfragen und abhängig von diesem FTP sichern oder überspringen.
Vor Zeile 86 wird jetzt folgender if-else-Part eingefügt:
[php]
if (date(„N“, time()) != 3) {
echo „Keine FTP-Sicherung an diesem Wochentag.
„;
} else {
[/php]
Nach dem else folgt die Zeile 86 im alten Code (die FTP Überschrift) und der FTP Bereich bleibt unverändert. Du brauchst dann noch eine geschlossene Klammer – im alten Code Zeile 175, mit den Zeilen oben drin Zeile 178. Die 3 im Code steht jetzt beispielhaft für Mittwoch, die Wochentage werden von Montag beginnend mit 1-7 nummeriert. Hier also die gewünschte Wochentag-Zahl eintragen und den Cronjob täglich ausführen, dann wird FTP 1x und SQL täglich gesichert. Auch FTP ließe sich mit den 3 Zeilen oben entsprechend anpassen.
That’s it! 🙂
hey das werde ich mal testen ^^. und schickes neues template find ich gut. aber ungewohnt erstmal
hab nur ein problem mit einem anderen backup plugin dort kann ich folgende archive auswählen zip
tar
tar gzip
tar bzip2
ich nutze zur zeit tar gzip leider wird im log oft angezeigt das der dateipfad zu lang ist und nicht gesichert werden kann.
nun welches archiv kann man denn bei all inkl noch nutzen was einen längeren pfad zu lässt. ? Du nimmst ja bei deinem script auch targzip da sollte ja dann der selbe fehler auftreten :(. das beduetet ja so viel ich habe nie ein 100% backup hmpf
Hallo Bill, ich Blicke nicht ganz durch, du erwähnst noch ein zweites Backup Plugin und Probleme mit der Pfadlänge. Treten die Probleme bei meinem Script oder dem anderen Plugin auf?
Ich habe bei all-incl bisher nur dieses Dateiformat genutzt, weil die von all-incl bereitgestellte Funktion, die das archivieren erledigt, das so anbietet. Ich weiß nicht, ob andere formate möglich sind. Aber vermutlich würde das das pfadproblem nicht lösen?
Erkläre vielleicht nochmal etwas genauer.
LG
hey also leider geht das script seid einiger zeit gar nicht mehr bei mir und ich weiß nicht warum. es rödelt und rödelt doch nichts passiert. warte auf …. domainname
also wegen zweitem backup ja ich nutze ein backup plugin in meinen wordpress installationen. dieses zeigt mir gerne mal ein fehler an das für gzip maximale länge der dateipfade erreicht wurde. meist sind das cache files. die dann in domain./plugins/namebackup/backupcache/sicherung/namebackupcache liegen und das ist mehr als 130 zeichen lang oder wie lang es maximal sien darf
nun klappt es doch wieder dauert nur sehr lange.
bekomme im log aber die folgende nachricht
Hallo billy,
Dieser Dateiname macht mich stutzig…
Backup fertig: DB_d01xff33_2017–03–05_125716“_“billywpmanager“sql“
Das sieht nach einer falschen Definition der Variable $archivName aus.
Diese steht im original-Script in Zeile 122.
Dort scheint bei dir etwas mit der Verkettung zwischen Text und Variablen nicht zu stimmen.
HTH
Hallo billy,
ich kann leider aktuell keine Probleme feststellen. Ich habe die Scripts mal sichtbar ausgeführt (normalerweise macht das ja mein cron) und sowohl über den Browser als auch per Mail positives Feedback bekommen, siehe Screenshot.
Komisch ist auch: Meine Zeile 224 ist leer. Zwischen 223 und 225 ist eine leere Zeile, obwohl ich sowas eigentlich selten mache. Was steht da bei dir?
Meine Zeilen 222-226 sehen so aus:
LG, Hannes
Hallo Hannes,
nach langer Suche bin ich auf dein Script für ein FTP und DB Backup gestoßen und es wäre fast perfekt wenn ich wüsste wie ich folgende kleine Änderung vornehmen könnte.
Ich habe mehrere Webseiten, die im Ordner „seiten“ im rootverzeichnis liegen, also „root->seiten->Verschiedene_Webseitenordner“
Dein FTP Script liegt bei mir im Verzeichnis „root->tools->ftp.phpx“
Folgendes habe ich in deinem Script (Version 1.2.2) für mich angepasst:
$dir = $pfad.“tools/“; // in which subfolder is this backup php file? this would be: „root/backup/“
$ftpFoldersToBackup = array(„seiten/Webseite1“, „seiten/Webseite2“);
Als Fehler spuckt er folgendes aus:
Warning: filesize(): stat failed for /www/htdocs/w0xxxxxx/tools/FTP_seiten/Webseite1_2017-03-14_154903.tar.gz in /www/htdocs/w0xxxxxx/tools/ftp.phpx on line 132
Fehler bei der Backup Überprüfung. Die Backup-Datei ist fehlerhaft oder nicht vorhanden.
Verzeichnis-Sicherung fehlgeschlagen. Erstelltes Archiv ist fehlerhaft.
Was funktioniert ist den gesamten root Ordner „seiten“ zu sichern, was ich allerdings nicht möchte.
Meine Frage also ist, was ich ändern muss damit ich die Unterordner von root->seiten einzeln sichern kann?
Ich bin auch bei All-Inkl.
Vielen Dank
PS.: Das Datenbank-Backup funktioniert perfekt :).
LG,
Daniel
Hallo Daniel,
wie im Kommentar zu sehen (bei mir Zeile 57)
// which root folders should get backed up? comment is optional
Kannst du nur rootfolder übergeben, keine bestimmten Unterverzeichnisse.
Eine mögliche Lösung für dich wäre z.B. die Variable $pfad direkt auf dein Unterverzeichnis „seiten“ zu legen und dann alle rootfolder sichern.
Ist nicht getestet, wäre aber ein Ansatz.
Dazu musst du an zwei Stellen den Text anpassen:
Aus „preg_replace(‚/(\/www\/htdocs\/\w+\/)…“
Wird „preg_replace(‚/(\/www\/htdocs\/\w+\/seiten\/)…“
Das ganze einmal bei der Variable $pfad und einmal bei der Variable $ftpFoldersToBackup.
Hoffe das hilft.
Wie gesagt, es ist ungetestet. Rückmeldung wäre aber nett.
Hallo Chrunchy,
danke für die Antwort und deine Lösung hat bei mir tatsächlich funktioniert.
Die Backups der einzelnen Seiten werden jetzt immer einzeln angelegt so wie ich es wollte.
Die Backups werden zwar im Ordner „root/seiten/backups/“ gespeichert, weil ich es nicht hinbekomme, dass sie im ordner „root/backups/“ gespeichert werden aber das stört mich nicht weiters.
Vielen Dank nochmals!
also hier meine zeile von 221 bis 229
echo „<br>########################################<br>“;
echo „<strong>Datenbank $dbName wird gesichert…</strong><br>“;
flush();
$sqlFile = „DB_$dbName“.date(‚_Y-m-d_His‘).“_“.$dbComment.“.sql“;
exec(„mysqldump -u ‚$dbUser‘ -p’$dbPassword‘ –quick –allow-keywords –add-drop-table –complete-insert –quote-names ‚$dbName‘ >$sqlFile“);
exec(„gzip $sqlFile“);
$sqlFilePath = $dir.$sqlFile.“.gz“;
$sqlSize = round(filesize($sqlFilePath)/1000000, 1);
if(!validateBackup($sqlFilePath)) {
in der zeile 224 steht bei mir name und dazu eben der commentar $dbComment
das habe ich hier aus den komentaren genommen. ich wollte einen kommentar mit an die zip hängen. macht das vll den fehler ???
ich wollte halt in meinen db namen noch mein kommentar der db haben um gleich zu sehen welche datenbank es ist.
das scheint den
Notice: Use of undefined constant “_“ – assumed ‚“_“‘ in /www/htdocs/werecx6b/backup/ftp–backup.phpx on line 224
auszulösen. gibt es eine lösung ???
achja ich hab das gefühl mein script sichert nicht immer. kann es sein das es nur sichert wenn etwas neu ist die db oder ftp ???
Hallo billy,
die Zeichen werden hier entweder umgesetzt, oder sie sind in deinem Script schon falsch.
Solltest du wirklich im Script die Anführungsstriche unten haben, sowohl einfach, wie doppelt, so klappt das nicht.
Nachfolgendes sollte aber gehen:
$sqlFile = „DB_$dbName“.date(‚_Y-m-d_His‘).“_“.$dbComment.“.sql“;
Gruß Chrunchy
OK, hier setzt der Editor den Text auch um. Kann leider keinen Code einfügen…
Möglicherweise macht der „date“-Parameter mitten drin aber auch unkontrollierte Ding.
Stell doch um…
$sqlFile = „DB_$dbName“.“_“.$dbComment.“_“.date(‚_Y-m-d_His‘).“.sql“;
o.g. funktioniert bei mir. Zumindest wenn alles im richtigen Editoreingegeben wurde.
hab das mal geändert tatsächlich waren die anführungszeichen oben sehr merkwürdige formatierung. leider zeigt mir das script nichts an oder bricht bei der hälfte einfach ab
kann es sein das ich was mit htaccess falsch gemacht habe ? bei mir speert er den ordner backup dort drinnen liegt das .phpx script.
Eine Anzeige habe ich auch nicht, wenn ich das Script im Browser ausführe. Das hat zwei folgen. Zum einen sieht man nicht was gerade passiert, zum anderen läuft das Script je nach Servereinstellung nur x Sekunden.
Normalerweise soll die flush(); eine Ausgabe auslösen, das funktioniert aber wohl nicht.
Bei mir läuft das Script am Ende auch ur sauber durch, wenn im Webspace php als Apache-Mod eingerichtet ist. Sobald php im CGI-Mod ausgeführt wird, bricht mein Script nach 600 Sekunden ab. Dies ist eine Voreinstellung auf meinem Server.
Im Apache-Mod läuft das Script zumindest als Cronjob aufgerufen komplett durch.
htaccess sichert ja nur das Backup-Script vor einem ungewolltem Aufruf. Wenn du das Script starten kannst, ist htaccess korrekt eingerichtet. In dem Moment, wo du die Daten eingibst, und das Script startet, ist der Verzeichnisschutz innerhalb der aktuellen Session aufgehoben.
Hallo Leute,
sorry für die Codeprobleme – aus mir nicht bekannten Gründen, zeigt der Kommentar-Editor hier nicht mein Code-Plugin an, ich kann hier Code auch nur über die Tags des Plugins manuell einfügen. Gehe ich irgendwann nochmal an.
Auch wenn das jetzt vermutlich geklärt ist, hier nochmal der Code kopierbar, für andere:
flush() spuckt eigentlich Ausgaben aus, das scheint aber vom Webhoster gesteuert zu werden. Es gab Zeiten, da hat das funktioniert. Das sollte eher kein Codeproblem sein.
PHP execution time limits sind in der Tat problematisch, wenn man viel sichern will. Allerdings müsste das Problem verschwinden, wenn die Backups nichts manuell per URL-Aufruf gestartet werden, sondern automatisiert über einen cronjob des Webhosters, wie Chrunchy korrekt sagt.
Im Gegensatz zum Aufruf durch einen Nutzer/via URL, hat PHP über CLI (Kommandozeile) meist keine Ausführungszeitlimits, also deaktiviert.
Also testweise mal das Backupscript in All-Inkl als Cronjob eingerichtet, die Ausgaben per Mail schicken lassen und dann abwarten, vielleicht geht es dann von allein. Hier meine Einrichtung:
Ich denke auch nicht, dass htaccess da reinfunkt, wenn du da die Tipps im Beitrag soweit befolgt hast.
Hallo Hannes,
vielen Dank für diese grandiose Anleitung. Hat bei mir auf Anhieb funktioniert (inkl. Cronjob).
bei mir funzt es leider immer noch mit cronjob. es schafft gerade mal 5 seiten die ftp dateien und das war es dann. es fehlen also ftp ordner und komplett die datenbanken :(. langsam weiß ich nicht mehr weiter.
Hallo billy,
ich kann dir anbieten mal einen Blick in das Script zu werfen, wenn du es zur Verfügung stellst.
Vorher solltest du natürlich die Passwörter im Script entfernen.
Bei all-inkl kannst du zu einem Cronjob eine Mailadresse angeben, wo die Ausgabe des Scripts hingesendet wird. Geht aus dieser Mail etwas hervor wworan es liegt?
Gruß Chrunchy
Hallo Billy,
also bei mir läuft das Script sauber durch per cronjob. Laufzeit knapp 30 Minuten im Ergebnis sind es 3 Verzeichnisse mit knapp 14,8 GB Volumen in den Backup-Files.
Ich fürchte, solange du hier keine Inhalte von den Mails bekannt gibst, wird es schwer die Ursache zu finden.
Ah, Doppelpost – siehe mein Statement hier. Zum Troubleshooten kann man noch ein paar Tests machen und mit den Resultaten weiter einschränken, woran es liegt.
wollte jetzt noch einmal alles neu erstellen da stimmt aber was in deinem code nicht ^^.
da sind irgendwie immer die 0 aus dem code raus zwei beispiel:
$allFtpTime = ;
$allSqlTime = ;
dadurch bekomme ich immer syntax error
wollte mich noch mal melden. nach neu laden der seite war alles korrekt
das script läuft nun etwas weiter als früher aber immer noch nicht durch. sehr schade das ist merkwürdig das es nicht mehr richtig geht. früher ging alles.
all inkl schreibt mir auf eine support mail. das das script hohe ausführzeit braucht, man aber nichts ändern kann
kann mir jemand schreiben wie ich das script teile ?? also so das ich eben einmal 5 ftp und msql sichere und dann noch ein script habe was wieder 5 macht und immer so weiter?
habe hier https://zoman.info/datenbank-und-webseitenbackup-mit-e-mail-benachrichtigung-und-downloadlink-bei-all-inkl-com eine möglichkeit gefunden nur 1ne db und 1 ftp zu sichern. das wäre mir aber zu wenig
Billy, kriegen wir alles hin. Ich gucke mir nochmal den Code in meinem Artikel an, mein Code Plugin scheint keine gute Wahl zu sein. Notfalls lade ich das Script erstmal als Datei hoch, Download statt Code.
Das Teilen ist doch auch recht easy. Du kopierst das Script, backup2.phpx, und packst dort die Projekte/Ordner rein, die in der backup1.phpx nicht drin stehen. Dann machst du ein cronjob für die erste und einen für die zweite Datei, mit ausreichend zeitlichem Abstand zwischen den Ausführungen. Bzw am 1. Des Monats Datei 1, am 2. Datei 2. Du kannst ja beliebig viele Backup Dateien haben, obwohl das natürlich Quatsch wäre, aber vom Prinzip.
hallo billy,
was hast du für eine Scriptlaufzeit bis zum „Abbruch“?
Per Cron UND php im Apache-mod, gibt es bei all-inkl keine Beschränkung.
Teilen geht am einfachsten, wenn du zwei Scripte mit hast, in denen du über den Verzeichnis-Ausschluß die zu sichernden Ordner angibst.
Fehlende 0 im Script kann ich bestätigen, dabei ist mir aufgefallen…
@ini_set(„max_execution_time“, 300);
Den Wert hast du hoffentlich nach oben gesetzt, oder? Bei mir steht der auf 3600.
Hey meine lieben wenn ich wieder nüchtern bin und zeit finde posten ich das Script mal als Datei. Ja Hannes mach es lieber als datei denke da kann man dann viele Fehler ausschließen. Code ist immer so eine Sache.
In der Mail die ich bekomme steht nur welche verzeichnisse gesichert wurden. Das bricht manchmal sogar im Satz ab also sichere hack…. Ende.
An die timeout habe ich auch schon gedacht hab mich aber nicht getraut das zu ändern. Werde also mal auf 3600 setzen
Merkwürdig ist das es erst seid dem Umzug des Servers seitens all inkl nicht mehr funzt.
Zur Not splitte ich das Script und lasse eben nur 3 4 Seiten sichern.
Schön das hier noch so toll Menschen unterwegs sind. Wenn jetzt noch jemand bei ist der mir eine neue Idee für eine Website gibt dann wäre ich mehr als glücklich
da bin ich mal wieder.
hat sich leider nicht gebessert. selbst wenn ich weniger webseiten sicher, mal macht er 2 oder mal nur 1ne. aber nie die datenbanken so weit kommt es nicht.
die ausführungszeit ist bei 3600 eingestellt. sehr merkwürdig das lief immer so gut und nun :(. werde da wohl eine andere backuplösung finden müssen
Ich bin mir relativ sicher, dass es an der php-Version von deinem Hosting liegt.
Sobald hier CGI/FPM im Spiel ist, läuft auch der Cronjob max. 10 Minuten.
Abhilfe schafft hier nur eine Umstellung auf php im Apache Mod
Hey @billy: Hat der Tipp von Chrunchy geholfen?
@Chrunchy: Kannst du vielleicht für weitere Lesen und Hilfesuchende ganz kurz erklären, wie man diese Umstellung auf php erledigt?
@Hannes, ich habe bei all-inkl einen kompletten Server gemietet.
Ich weiß also nicht ob in einzelnen Domain-Paketen die php-Version ausgewählt werden kann.
Falls doch, ist die Auswahl in der Domain-/Subdomain-Verwaltung zu finden.
Dort gibt es eine Möglichkeit die php-Version auszuwählen. Zumindest bei mir.
Danke fürs Feedback Chrunchy. Ich habe auch nochmal nachgesehen und kann bestätigen: Auch im normalen Webhosting lässt sich pro (Sub)Domain die PHP Version in den Einstellungen der Domain festlegen. Neu erstellte (Sub)Domains haben immer die aktuellste stabile Version zu diesem Zeitpunkt ausgewählt. Außerdem kann mit dem htaccess Befehl
AddHandler x-httpd-php7.0 .php
die PHP Version auf Verzeichnisebene steuern. Noch genauer lässt es sich auf Dateiebene mit Dateiendungen steuern, indem die Datei einfach statt .php die Endung .php70 bekommt. Es lässt sich also recht flexibel konfigurieren, um Konflikte zu vermeiden.Nur um hier unnötige Verwirrungen zu vermeiden…
php 7.0 läuft im cgi-Modus und hat damit auch im Cronjob eine maximale Laufzeit von 10 Minuten.
Wenn das nicht reicht, muss auf eine ältere Version umgestellt werden.
Bei mir ist aktuell die Version 5.5 noch als apache-Modul auszuwählen. Damit gibt es im cronjob, zumindest bei mir, keinen timeout seitens des Servers, außer die im Script angegebene Laufzeit wird überschritten. Die kann man aber anpassen.
Hallo Hannes,
ich bin per Zufall auf Dein tolles Skript gestoßen, es verursacht bei mir aber laufend Fehler.
Weiter oben hat mal jemand geschrieben, dass das Code-Plugin Fehler verursacht.
So auch bei mir. Aktuell habe ich z.B. folgendes rauskopiert (inkl. Angabe der Zeilennummer):
28: $allFtpTime = ;
29: $allSqlTime = ;
Damit bekomme ich Fehler. Wenn ich 0 eintrage, dann kommen die nächsten Zeilen mit Fehler… Alles in allem habe ich es nicht zum Laufen gebracht, was ich sehr schade finde.
Könntest Du vielleicht Deinen Code auch als Download anbieten? Das wäre große Klasse!
@HarryPhone,
da wird doch nur 2 Variablen ein Wert zugeordnet, das sollte keine Fehler produzieren.
Setzte die Zeilen mal wie folgt:
$allFtpTime = 0;
$allSqlTime = 0;
Allerdings stelle ich gerade fest, dass auf diese Variable nie zugegriffen wird. :-0
@Hannes, wofür ist die gut?
OK, habe gerade etwas kurioses festgestellt.
Es ist fatal, wenn man oben im Artikel auf „Code anzeigen“ klickt und den Quellcode dann im Browser markiert um diesen zu kopieren. Dabei gehen einige Nullen (0) verloren, was mit Sicherheit zu Fehlern führt.
So sieht auch der Code von HarryPhone aus.
@HarryPhone, bitte den Quellcode nocheinmal wie folgt kopieren:
1. oben im Artikel „Code anzeigen“ anklicken
2. oberhalb des Codes erscheint eine graue Zeile, darin das dritte Icon von recht (kopieren) anklicken.
3. mit STRG-C den markierten Teil in die Zwischenablage befördern.
4. mit STRG-V in den eigens favorisierten Texteditor einfügen und die Datei speichern.
Damit sollten die Fehler weg sein, weil alle Informationen im Quelltext drin sind.
HTH
Diese Probleme schaffen wir erstmal mit einem Download aus der Welt: backup.phpx (Download als .txt, einfach die Dateiendung ändern). Das ist meine Backupdatei, also definitiv ohne Fehler. Ihr müsst natürlich alle Variablen prüfen/setzen vor dem ersten Durchlauf.
Hallo zusammen,
danke! Jetzt hat alles funktioniert. Beim Kopieren der .htaccess habe ich mich an Chrunchys Anleitung gehalten nachdem ich auch hier Fehlermeldungen beim einfachen Kopieren erhalten hatte. Dieses Code-Plugin scheint leider ziemlich buggy zu sein.
Einen Wunsch hätte ich noch: Die Absender-E-Mail-Adresse als Variable zum Einstellen.
Hintergrund: Ich verwende z.B. den MySQLDumper zum Sichern der Datenbanken (was ja nicht nötig wäre, da es Dein Skript ja auch könnte, aber der MySQLDumper läuft ja schon und man kann zusätzlich direkt die Datensicherung einspielen). Und jetzt bekomme ich E-Mails von unterschiedlichen Absendern für die Datensicherung. Da wäre es natürlich schöner, das Ganze zu vereinheitlichen…
In jedem Fall vielen Dank für das tolle Skript. Besonders die FTP-Funktion ist super. So ist man auch abgesichert, wenn beim Hoster alles abfackelt.
Absenderadresse als Variable ist kein Ding…
Zeile, bei mir 339
Ersetzen durch
Vorher die Variable analog zu $mailTo definieren, bei mir z.B. ab Zeile 84
Jetzt hoffe ich nur der Editor baut nicht wieder Mist.
OK, copy&Paste wird nicht funktionieren.
Die Anführungsstriche sind alle die gleichen (Schift-2) Doppelte Anführungsstriche oben.
Hab den Code mal korrigiert. Anderen Editor/Kommentar-Editor/Code-Plugin habe ich alles noch auf der Liste :-/
PS: Welchen Kommentar-Editor und welches Code Plugin nutzt ihr denn so?
@Hannes, Danke.
In Sachen Editor und Plugins bin ich raus, betreibe keine derartige Seite wo so etwas benötigt wird. Hoffe aber du findest eine Lösung, gerade wo es hier immer mehr um Teile des Quellcodes geht, wäre das sicher hilfreich.
Hallo Hannes,
danke für dein tolles Script!!
Eine Frage hätte ich dazu, die durch mein Nextcloud Datenverzeichnis ergibt: Gib es eine Möglichkeit die Größe der einzelnen Archivdateien zu splitten, sodass bei Bedarf mehrere Files erzeugt werden, falls die maximale Filegröße überschritten wird?
Danke, Manfred
Hallo Manfred! Freut mich, dass du das Skript verwenden kannst. Zum Splitting wurde ich schonmal gefragt und hatte schonmal ein Brainstorming und Draft zusammengetippt, siehe diesen Kommentar. Das ist aber nicht ausprogrammiert und muss daher erst gemacht werden. Solltest du das zu Ende programmieren, gib mir gerne Bescheid, würde das dann gerne mit in die finale Version einbauen.
LG, Hannes
Ich bekomme das Skript zum Laufen und es legt auch die Sicherungen an.
Auf dem Server läuft aber php 7.1 und es kommt damit folgende Warnmeldung:
Warning: A non-numeric value encountered in …… backup.php on line 425
So sieht die Zeile aus:
$mailText += „Die automatische Sicherung hat „.count($backupFiles).“ Datensätze (Verzeichnisse/Datenbanken) in insgesamt $backupTime Sekunden gesichert.“;
Wer hat eine Idee was hier falsch ist?
Danke, FranK.
Hallo Frank. Mit PHP 7.1 wurde eingeführt, dass uninitialisierte Variablen beim Abrufen eine Warnung werfen, das war vorher nicht so. Das wird vermieden, indem die Variablen entweder vorher irgendwie gesetzt oder mit einem beliebigen Wert initialisiert werden. Die Variablen $backupFiles und $backupTime werden hier benutzt. Normalerweise müsste mein Skript zum Zeitpunkt der Mailerstellung diese beiden Variablen bereits mit irgendeinem Wert versehen haben, beide Werte (Dateianzahl und Backupzeit) werden vorher gesetzt, wenn ein Backup erfolgreich durchlief. Ich vermute also mal, dass bereits vorher etwas beim Backup nicht funktionierte.
Du kannst dir die Variableninhalte mal mit
var_dump($backupFiles, $backupTime);
ausgeben lassen, dann weißt du schonmal, welche Variable Schuld ist und wo der Fehler liegen könnte. Wenn backupFiles undefined ist, dann hat beim Auslesen der zu sichernden Ordner etwas nicht geklappt. Wenn Letzteres undefined ist, war der tatsächliche Backupvorgang (ca. ab Zeile 120) wohl nicht wie erwartet. Schau auch mal ins FTP, ob du dort vielleicht schon erstellte Archive findest.Hallo Hannes,
das Backup funktioniert ganz normal und die Archive werden sowohl für Dateien als auch Datenbanken angelegt. Es ist wohl eher eine kosmetische Warnung, die aber irritieren könnte…
https://stackoverflow.com/questions/42044127/warning-a-non-numeric-value-encountered
New E_WARNING and E_NOTICE errors have been introduced when invalid strings are coerced using operators expecting numbers or their assignment equivalents. An E_NOTICE is emitted when the string begins with a numeric value but contains trailing non-numeric characters, and an E_WARNING is emitted when the string does not contain a numeric value.
Hallo Hannes,
vielen Dank für Deinen Einsatz hier auf Deiner Website und den supertollen Service den Du hier bietest! Wie mein Vorredner (Frank) schon festgestellt hat, kommt es ab PHP 7.1 zu den Warnmeldungen.
Mir ist nun zusätzlich aufgefallen, dass bei ALL-INKL.COM, unter aktuellen Serverumgebungen, die PHPX-Dateien nicht mehr laufen (Unsupported PHP Version). Das Script muss nun entweder PHP71, PHP72 etc. oder einfach nur PHP lauten (entsprechende PHP-Voreinstellung vorausgesetz), dann läuft alles. Nur halt, mit entsprechendem Warnhinweis.
Viele Grüße!
Hallo Anonym,
das stimmt, mein Skript läuft auch schon seit Längerem als PHP, der Cronjob somit auch. Hab ich hier noch gar nicht aktualisiert.
Die Warnungen kann man vermutlich beheben, wenn man das Text-Variablen-Mischmasch in backupSummary mal ordentlich macht oder den @error_reporting(E_ALL) Scope anpasst, beispielsweise auf @error_reporting(E_ERROR | E_PARSE | E_NOTICE);> – dann kommen keine Warnungen mehr.
Hallo Hannes,
vielen Dank für die rasche Antwort. Das Script zu verfeinern wäre dann wohl eher was für die Spezialisten hier unter Euch. Oder Du schreibst mal ein Update das Artikels wenn es Deine Zeit zulässt 😉 Werde Deinen Blog gerne weiter beobachten!
Viele Grüße!
Yes, I know, müsste man mal machen 😉
Ich hab gestern nochmal kurz geschaut aber auf den ersten Blick weiß ich nicht, woran genau er sich da stört. Ich denke mal kurz drüber nach, vielleicht kann ich das fixen.
Schau gerne weiterhin vorbei und wenn du was skript-/coding-mäßiges brauchst, sagste Bescheid. Meist wird aus Nutzeranfragen dann direkt ein neuer Blogartikel 😉
LG!
So, nach dem letzten Server-Update bei All-inkl gibt es keinen apache-mode für php mehr.
Das heisst die Laufzeit ist auf 10 Minuten begrenzt.
Hier hilft dann nur der Umweg über eine Initialisierung des Updates via php-Datei mit etwa folgendem Inhalt.
[code]
&1″, $out, $result);
echo „Returncode: “ .$result .““;
echo „Ausgabe des Scripts: “ .““;
echo „“; print_r($out);
?>
[/code]
Wobei „backup-webspace.php“ der Name dieses Scripts ist und es sich im selben Verzeichnis wie das Init-Script befindet. Im Cronjob muss dann natürlich das Init-Script aufgerufen werden.
Damit wird der Timeout von 10 Minuten für ein Cronjob umgangen.
Gruß Chrunchy
OK, der Code hat schonmal nicht funktioniert…
Dann hier der Link zur Anleitung: https://all-inkl.com/wichtig/anleitungen/skripte/sonstiges/per-script/shellscripte-ausfuehren_304.html
Schonmal vielen Dank für den Input! Ich habe aktuell nicht viel Zeit für den Blog, werde mich aber vermutlich zeitnah bei dir mal melden und ggf. Fragen stellen. Dann passe ich den Artikel noch an.
So, ich habe den Artikel aktualisiert und ein solches Aufrufskript mit zum Download angebot. Danke nochmal für den Hinweis 🙂
Hallo und Danke für die viele Arbeit!
Ich scheitere leider bereits beim Aufruf des Scripts:
PHP version not supported
The requested PHP version is not supported on this server.
————————————————————————
Die gewählte PHP Version ist auf dem Server nicht verfügbar.
Egal ob PHP 7.2, 3 oder 4 – es kommt immer der selbe Fehler.
Was mache falsch?
Danke und Gruß
Olly
Ich hatte versucht, den Root-Pfad zu nutzen, ohne, dass eine Domain/Subdomain den Backup-Pfad ansprechen konnte. Nach Anlegen einer Subdomain läuft es.
Danke!
Hallo,
da All-Inkl.com mittlerweile seine Server auf Ubuntu 18 betreibt, dürfen die Scripte nur noch xyz.php (ohne x am Ende) benannt werden.
Ich bekomme beim Scipt-Aufruf folgende Fehlermeldung:
[0] => PHP Warning: Use of undefined constant d12345a6___d12345a6___V00ZbGw0ZNYWwH0Z___Projekt – assumed ‚d12345a6___d12345a6___V00ZbGw0ZNYWwH0Z___Projekt‘ (this will throw an Error in a future version of PHP) in /www/htdocs/z00a0gc0/backup/backup.php on line 68
[1] =>
[2] => Warning: Use of undefined constant d12345a6___d12345a6___V00ZbGw0ZNYWwH0Z___Projekt – assumed ‚d12345a6___d12345a6___V00ZbGw0ZNYWwH0Z___Projekt‘ (this will throw an Error in a future version of PHP) in /www/htdocs/z00a0gc0/backup/backup.php on line 68
[3] => 06.06.2020 13:49:27
Das Backup wird aber erstellt.
Was sollte wie geändert werden, damit es ohne Warnhinweise durchläuft?
Hallo Hannes,
als erstes ein herzliches Dankeschön für das Script, das inkl. Cronjob auf Anhieb lief. Ist ja auch wirklich gut dokumentiert!!
Und heute stehe ich nun vor der Aufgabe, dass ich ein Restore von einem Ordner samt Unterordner und einer Datenbank machen muss. Sozusagen also den zweiten Teil eines kompletten Backzp/Restore Vorgang.
Ich hatte frecher Weise auf ein Restore.php als Pendant zum Backup.php gehofft. Gibt es wohl leider nicht. Aber vielleicht ist es eine Anregung…
Erstmal Danke für die Arbeit. Funktioniert sehr gut.
Ein paar Gedanken…
Kann man eine Verschlüsselung einbauen (vorausgesetzt mit den Binarys bei all-inkl geht das)
Wäre für eine (S)FTP Kopierung auf einen Server den ich nicht voll kontrollieren kann ganz praktisch.
Eine SMTP Funktion wäre ganz nett, das PHP-Mailing ist immer so eine Sache.
Hallo Hannes, vielen Dank für dein tolles Script. Leider bekomme ich eine Fehlermeldung mit Verweis auf die Zeile 130 der backup.php: Warning: filesize(): stat failed for …..
Das Backup lädt zwar, aber die Fehlermeldung irritiert mich. Hast Du da eine Idee?
LG Jan
Hi,
ich stehe vor dem gleichen Problem. Ebenfalls Zeile 130 Warning: filesize() etc.
Es wird zwar ein Backup erzeugt, aber scheinbar wird dann mit Fehler abgebrochen.
Gibt es hier eine Lösung?
Hallo Hannes,
wo finde ich denn die V1.3? Im Download ist „nur“ die V1.2.2 und mit der komme ich leider so überhaupt nicht zurecht, da ich nicht erkenne, wo ich nun die Daten der Datenbank oder die FTP-Parameter eintragen soll und wie…
Die V1.1, mit der ja nur FTP gesichert wird, läuft einwandfrei. Nur ist diese im Aufbau anders als die V1.2.2, so dass man auch nicht einfach mit Copy/Paste die Daten rüberkopieren könnte.
Und die Option, auch die Datenbank auf diese Weise nicht nur zu sichern, sondern zusätzlich extern auf einem FTP-Server abzulegen, ist grandios und Gold wert.
Bitte daher nochmal für einen absoluten Script-Dummy erläutern, wo genau die Daten reingepackt werden müssen. Danke