Upload via GUI (267 Dateien)

This commit is contained in:
2026-10-19 18:05:51 +00:00
parent 845abfa9d9
commit 42554bdadf
18 changed files with 1629 additions and 13 deletions
+27
View File
@@ -155,6 +155,33 @@ $check($broken && $broken[0]['level'] === 'error' && str_contains($broken[0]['me
backup_verify_and_record($bk['path']);
$check(backup_path_for($bk['filename'], $backupDir) !== null && backup_path_for('../../etc/passwd', $backupDir) === null && backup_path_for('backup_x.zip', $backupDir) === null && backup_path_for('config.php', $backupDir) === null, 'Backups werden nur über echte Dateinamen im Backup-Ordner angesprochen');
// ── Automatische Prüfung ─────────────────────────────────────────────────────
$auto = create_backup($root, $backupDir);
$map = json_decode((string) get_setting('backup_check_map', ''), true) ?: [];
$check(!empty($auto['ok']) && !empty($auto['verify']['ok']), 'create_backup prüft jedes neue Backup automatisch und liefert das Ergebnis mit');
$check(isset($map[$auto['filename']]) && $map[$auto['filename']]['ok'] === true, 'Das Prüfergebnis wird je Sicherung gemerkt (Anzeige in der Liste)');
$noVerify = create_backup($root, $backupDir, null, ['verify' => false]);
$map = json_decode((string) get_setting('backup_check_map', ''), true) ?: [];
$check(!empty($noVerify['ok']) && $noVerify['verify'] === null && !isset($map[$noVerify['filename']]), 'Mit Option verify=false wird nicht geprüft (für Zwischen-Backups)');
$dbOnly = create_backup($root, $backupDir, null, ['with_database' => false, 'with_files' => true]);
$check(!empty($dbOnly['ok']) && $dbOnly['verify'] === null, 'Backups ohne Datenbank werden nicht als defekt gemeldet, sondern gar nicht automatisch geprüft');
// Nachholen: noch nie geprüfte, beschädigte und veraltete Prüfungen
foreach ([$noVerify, $dbOnly] as $b) @unlink($b['path']);
$unchecked = create_backup($root, $backupDir, null, ['verify' => false]);
sleep(1);
$broken = $backupDir . '/backup_2020-02-02_02-02-02.zip';
file_put_contents($broken, 'das ist kein zip');
$res = backup_verify_pending(50, 7, $backupDir);
$map = json_decode((string) get_setting('backup_check_map', ''), true) ?: [];
$check($res['checked'] >= 2 && $res['bad'] === 1, 'Nachprüfung findet das ungeprüfte und das beschädigte Backup (' . json_encode($res) . ')');
$check(($map[$unchecked['filename']]['ok'] ?? null) === true && ($map['backup_2020-02-02_02-02-02.zip']['ok'] ?? null) === false, 'Das ungeprüfte Backup ist in Ordnung, das beschädigte wird als defekt gemerkt');
$check(backup_verify_pending(50, 7, $backupDir)['checked'] === 0, 'Frisch geprüfte Backups werden nicht ständig neu geprüft');
$map[$unchecked['filename']]['at'] = date('Y-m-d H:i:s', time() - 86400 * 10);
set_setting('backup_check_map', json_encode($map));
$again = backup_verify_pending(50, 7, $backupDir);
$check($again['checked'] >= 1, 'Nach mehr als 7 Tagen wird ein Backup automatisch erneut geprüft (spätere Beschädigung wird bemerkt)');
@unlink($broken);
$rm = function (string $d) use (&$rm) {
foreach (scandir($d) ?: [] as $e) { if ($e === '.' || $e === '..') continue; is_dir("$d/$e") ? $rm("$d/$e") : @unlink("$d/$e"); }
@rmdir($d);