WBCE CMS – Way Better Content Editing.
You are not logged in.
Ja, das ist ein Problem, einen Port im Dateinamen ist nicht möglich, das gibt es ja nur bei einer URL
Offline
Könnte man den : zu einem _ übersetzen?
Betrifft anscheinend eh nur den Dateinamen...
Prinzipiell nicht schlimm, aber doch eine Eventualität....
Offline
Hab jetzt mal in der init.php zeile 65 folgendes hinzugefügt:
// replace von : in filenames
$host = str_replace(":", "..", $host);
Macht aus einen : einen .. was funktionieren sollte.
aber trotzdem haut es noch nicht wirklich hin.
Komm in den nächsten Tagen aufgrund einer OP aber nicht dazu....
aber noch passt etwas anderes nicht,
Offline
Hallo berny,
scheinbar verstehe ich das Problem nicht.
Habe in der config.php den Eintrag
define('WB_URL', 'https://wbce.loc:443');
gemacht.
Dann alle erstellten Seiten gesichert, läuft ohne Fehler durch.
Was muss ich tun, um den Fehler zu produzieren, gib mir bitte weitere Informationen
Offline
Wie heisst deine Backup-Datei?
ev liegt es gar nicht am :
Offline
Die Datei sieht so aus:
wbce.loc_2022-01-11-1641921334-p-ZNRNNg.zip
also Domain ("$_SERVER['HTTP_HOST']"), Datum, Uhrzeit, Typ, Random Token und dann zip, sql und log
Allerdings habe ich gesehen, dass in der URL Zeile des Browsers das ":443" fehlt.
Vielleicht teste ich falsch. Ist bei dir in der URL der Port zu sehen?
Im Anhang findest du eine Version zum Test, wo ein Doppelpunkt durch einen Unterstrich ersetzt wird.
Sag Bescheid, ob das funktioniert.
Last edited by mastermind (16.01.2022 09:54:02)
Offline
define('WB_URL', 'https://wbce.loc:443');
Allerdings habe ich gesehen, dass in der URL Zeile des Browsers das ":443" fehlt.
Vielleicht teste ich falsch. Ist bei dir in der URL der Port zu sehen?
Hallo mastermind,
ja in diesem Fall wird die Port Kompatibilität falsch getestet.
Wenn man Standardports wie 443 oder 80 angibt, wird das als Umleitung zu dem jeweiligen Protokoll erkannt und aus geführt.
Bei der URL oberhalb wird dass 443 einfach gelöscht, da du bereits auf https bist.
Verwende als Port
define('WB_URL', 'https://wbce.loc:10443');
und packe auf 443 etwas anderes hin, damit du sehen kannst ob es auch richtig funktioniert.
Wenn nur der Port verändert wird und im Standardport nichts vorhanden ist, kann es je nach config und verwendete Systeme vorkommen dass ein redirect false positive Ergebnisse erzeugt
Last edited by colinax (16.01.2022 11:36:51)
Offline
Danke für den Tipp.
Sehe jetzt tatsächlich auch den geänderten Port im Browser.
Habe damit das Backup getestet und mit der Version 2.7.1 funktioniert es ohne Probleme.
Die Datei sieht jetzt so aus:
wbce.loc_999_2022-01-17-1642419678-f-Smszup.zip
also Domain ("$_SERVER['HTTP_HOST']"), wenn vorhanden: Portnummer,
Datum, Uhrzeit, Typ, Random Token und dann zip, sql und log
Last edited by mastermind (19.01.2022 08:46:34)
Offline
berny
Bitte die Version 2.7.1 von backup_plus ins AOR stellen.
DANKE
Offline
done
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Ich habe heute einen unangenehmen Fehler in BackupPlus entdeckt.
Auf unsere Seite gibt es ein Verzeichnis /media/blog. Und das wird nicht mitgesichert. Ups.
Und da der Restore kein komplett lauffähiges System ergab, nehme ich an, dass noch mehr Verzeichnisse nicht gesichert wurden.
Ursache sind die excludes aus backup_settings.php:
[== PHP ==]
// -------------------- Excludes for backup type FULL ----------------------------
// Specify directories you do NOT want in the backup as an array for backup type "full"
$ignoreFullDirs = array('backups', 'owncloud','nextcloud','logs','log','cgi-bin');
In backup.php werden diese Excludes nicht sauber geprüft, so dass z.B. das Verzeichnis blog als log erkannt und ausgeschlossen wird.
Hier der relevante Ausschnitt aus backup.php.
Der Teil 'wbce' ist noch unverändert, den Teil 'full' habe ich korrigiert.
Da ich mich erst seit ein paar Tagen mit PHP beschäftige, mag es auch eine schönere Lösung geben.
Ein paar Kommentare sind direkt im Code.
[== PHP ==]
// Skip ignored directories if "wbce" backup
if ($_GET['type'] == 'wbce') {
foreach ($ignoreWbceDirs as $exclude) {
$exclude = $exclude.DIRECTORY_SEPARATOR;
if (strpos($rootpath, $exclude) !== false || $rootpath == $exclude) {
$continue = true;
break;
}
}
if ($continue) continue;
}
// Skip ignored directories if "full" backup
if ($_GET['type'] == 'full') {
foreach ($ignoreFullDirs as $exclude) {
// make sure to exclude full directory name only and not parts of it as well!
// (since it should run with PHP 7 too, we can't use str_starts_with())
// (perhaps preg_match() would fit here...)
//
// 1.) dir/ as first part of path
// 2.) /dir/ somewhere in path (note leading slash)
// 3.) but what is that 3rd thing for?
if (strpos($rootpath, $exclude.DIRECTORY_SEPARATOR) === 0 ||
strpos($rootpath, DIRECTORY_SEPARATOR.$exclude.DIRECTORY_SEPARATOR) !== false ||
$rootpath == $exclude) {
$continue = true;
break;
}
}
if ($continue) continue;
}
Last edited by chriz (18.02.2022 23:07:41)
Offline
berny
Nachtrag:
Die Excludes sollten vielleicht besser nicht im kompletten Pfad gesucht werden.
Es kann immer Verzeichnisse geben, die vom Namen her zutreffen, aber nicht ausgeschlossen werden sollten.
Ich würde die Excludes rooten. Bei Typ 'wbce' am WB_PATH. Also nicht "backups" sondern "/backups".
Mit entsprechender Anpassung an $rootpath natürlich.
Und die Namen jeweils excludeten Dateien sollten m.M.n ins Backup-Log geschrieben werden.
Übrigens war meine Vermutung richtig: es waren wohl andere wichtige Dateien/Verzeichnisse nicht im Backup, z.B.
modules/ckeditor/ckeditor/plugins/dialog/... - weil es auf log/ passte.
Und das war einer der Gründe, warum die restore-te Installation nicht richtig funktionierte.
Last edited by chriz (19.02.2022 08:44:42)
Offline
berny
Hier mein Zwischenstand der backup.php.
Folgende Änderungen sind drin:
* oben genanntes ungenaue Ermitteln der exclude-Verzeichnisse korrigiert (aber weiterhin im gesamten $rootpath)
* Log-Ausgaben etwas ergänzt
* einige Tippfehler beseitigt
* Hinweis auf ähnliche Problematik bei $includes eingefügt, aber noch nichts geändert
Bei dem Full-Backup habe ich bemerkt, dass es (logischerweise) auf die Nase fällt,
wenn der WBCE-Datenbanknutzer nicht auch die Rechte an den möglicherweise anderen Datenbanken in dieser DB-Instanz hat.
Vielleicht wäre ein Hinweis darauf auf der BackupPlus Admin-Seite ganz sinnvoll.
Angehängt mein aktuelles backup.php und ein diff gegen Version 2.7.1.
Offline
Und mir ist aufgefallen, dass leere Verzeichnisse nicht gesichert werden.
Beispiele:
./modules/backup_plus/pages
./modules/miniform/defaults
./temp/opf_plugins
./templates/adventurestrap-wbce/assets
./var/modules/elfinder/.quarantine
./git/plesk-git
Meiner Meinung nach sollte das aber geschehen.
Ansonsten fällt ein aus einem Restore entstandenes System möglicherweise später auf die Nase, weil ein erwartetes Verzeichnis nicht (mehr) existiert.
Zumindest sollte es aber im Log stehen.
Offline
Danke für das Testen und den Bugfix. Mir war das zwar auch aufgefallen, dass bei per Backup gesicherten und andernorts hochgeladenen Seiten der CKEditor nicht funktionierte, ich hatte da aber immer Übetragungsfehler aufgrund der zigtausend Einzeldateien des CKEs als Ursache vermutet...
Dass leere Verzeichnisse nicht gesichert werden, ist mMn nicht so schlimm (ein Modul sollte, falls es das Verzeichnis benötigt, es selbst anlegen können, und ansonsten wüsste ich nicht, wozu leere Verzeichnisse noch gut sein könnten).
Last edited by florian (21.02.2022 09:44:45)
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Hier die Version 2.7.2 mit der geänderten backup.php von chriz zum Testen.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Habe mir das noch mal angesehen, vielen Dank für die fundierte Analyse.
Im Anhang die neue Version zum Test mit den Änderungen, die bei mir funktionieren (unter Windows und Linux).
Die gemachten Änderungen stehen in der info.php
Last edited by mastermind (14.03.2022 12:26:26)
Offline
Beim Testen der 2.80 sind mir noch Problemfälle aufgefallen, die auch in 2.7x stecken.
Ich melde mich im Laufe des Tages mit Details oder auch schon Lösungen...
Offline
So, hier meine Ergebnisse:
1.) Mindestens seit 2.7x läuft eine Gesamtsicherung (full) auf schwer erkennbare Fehler, wenn irgendeine Datei nicht lesbar ist (z.B. wegen fehlender Rechte). Das kann natürlich leicht passieren bei einer über evtl. mehrere Installationen gehenden Sicherung. Aber die Sicherung sollte nicht abbrechen!
Ich habe jetzt eingefügt:
if (is_readable($file)) {}
2.) Entsprechend konnte es bei einer abgebrochenen Sicherung passieren, dass das Aufräumen auf einen "Internal Server Error 500" lief, wenn in list.php das temporäre zipfile inklusive des SQL-Files gelöscht wurde. Und zwar wenn das SQL-File (noch) nicht (mehr) existierte. Das habe ich abgefangen durch ein
if (file_exists($sqlfile)) {}
3.) Vermutlich um meinen Vorschlag bzgl. des Sicherns leerer Verzeichnisse zu ermöglichen, fehlte in 2.80 die Abfrage
if (is_file($file)) {}
Das klappt aber so nicht. Die PHP zip-Funktion kann keine Verzeichnisse einpacken und bricht mit Fehler ab, wenn ein Verzeichnis ankommt.
Also habe ich es wieder auf Dateien beschränkt...
Ein Workaround wäre es, in leeren Verzeichnissen z.B. eine Datei ".empty" anzulegen und die zu packen. Aber toll ist das nicht.
4.) Minimale Textanpassungen für's Log.
Meine angepassten backup.php und list.php sind zusammen mit diffs hier angehängt.
Last edited by chriz (13.03.2022 12:26:58)
Offline
Hallo Chis,
zu 1: kann ich verstehen, wenn man nicht komplette Rechte hat
zu 2: OK
zu 3: die Abfrage habe ich bewusst entfernt, weil ich die Zeile 107 geändert habe von
$files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
in
$files = new RecursiveIteratorIterator($iterator);
damit kommt kein Verzeichnis in der Schleife an, sondern nur Dateien.
Das funktioniert bei mir im Test mit leeren Verzeichnissen
Last edited by mastermind (13.03.2022 13:54:36)
Offline
zu 3: die Abfrage habe ich bewusst entfernt, weil ich die Zeile 107 geändert habe [...]
$files = new RecursiveIteratorIterator($iterator);
damit kommt kein Verzeichnis in der Schleife an, sondern nur Dateien.
Das funktioniert bei mir im Test mit leeren Verzeichnissen
Hmmm, dann teste ich noch etwas weiter, warum das bei mir hakte...
Edit:
Das ging fix: Ich habe in /var/www/html/ einen Link
phpmyadmin -> /usr/share/phpmyadmin
Und der lässt das Full-Backup abbrechen.
Dateien werden korrekt bearbeitet, Verzeichnisse korrekt ignoriert, aber Links rutschen durch die Prüfungen.
Last edited by chriz (13.03.2022 14:47:46)
Offline
Löst die Abfrage
if (is_file($file)) {}
das Problem oder sollte man irgendwelche Datei-suffixe abfragen?
Last edited by mastermind (13.03.2022 19:12:03)
Offline
Löst die Abfrage
if (is_file($file)) {}
das Problem oder sollte man irgendwelche Datei-suffixe abfragen?
Ja, das ursprüngliche is_file(), so wie ich es auch in #94 wieder drin hatte, scheint zu genügen.
Das verlinkte Verzeichnis läuft dann nicht auf Fehler, es scheint übersprungen zu werden.
Mir ist allerdings noch nicht ganz klar, was RecursiveIteratorIterator($iterator) genau so treibt, insbesondere mit Links...
Also insofern müsste man überlegen, ob die Sicherung Links folgen soll oder besser nicht. (Und das dann irgendwo erwähnen.)
Übrigens:
Folgende Aussage im Dialog von Backup_Plus ist (mir) unklar
Dateien, die mit einem Punkt beginnen, werden NICHT gesichert!
($iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);)
In meinen ZIPs sind zumindest einige dotfiles drin. Zum Glück!!! (.git usw.)
Edit:
Bezieht sich SKIP_DOTS nicht eigentlich nur auf die beiden Verzeichnisse "." und ".."?
Last edited by chriz (13.03.2022 20:50:45)
Offline
Hier mein aktueller Stand (nur die geänderten Dateien).
Das is_file() habe ich etwas verändert, auch für Logging.
Die Log-Ausgaben sind noch etwas angepasst/erweitert, deshalb auch Änderungen in tool.php, backup_settings und languages.
Edit:
Sorry, noch eine Änderung. Nun Version "c3". Hinweise auf Verhalten bei Links ergänzt/verbessert.
Links auf Verzeichnisse werden ignoriert, Links auf Dateien wird aber gefolgt!!!!!??
Und eine Frage: Habt ihr eigentlich ein Git- oder Mercurial-Repository für Backup-Plus?
Last edited by chriz (14.03.2022 08:25:45)
Offline
Habe die Änderungen in die Version 2.8.0 übernommen, vielen Dank.
Der Text "Dateien, die mit einem Punkt beginnen, werden NICHT gesichert!" ist natürlich falsch, habe nicht aufgepasst.
Muß natürlich heissen: "Verzeichnisse die mit einem Punkt beginnen, werden NICHT gesichert!" (z.B. habe ich im root ein Verzeichnis ".vscode").
Der Text ist jetzt wieder entfernt.
Es gibt das WBCE Addon Repository, dort werden die aktuellen Versionen von florian eingestellt.
Offline