MANAGE_APP_ROOT . "/includes/after-update.php", // "callback" => "myProjectAfterUpdate", // ]); // // Diese Datei muss Teil des Release-Pakets sein, sonst fehlt sie nach dem // ersten Update. /** * @param array $context app_root, instance, from_version, to_version, * backup_dir, run_id, migrations, ggf. pdo */ function myProjectAfterUpdate(array $context): void { // 1. Kompilierte Templates und Caches verwerfen. foreach (glob($context["app_root"] . "/data/cache/*.php") ?: [] as $file) { @unlink($file); } // 2. Verzeichnisse anlegen, die ein neues Release voraussetzt. $newDir = $context["app_root"] . "/data/exports"; if (!is_dir($newDir) && !mkdir($newDir, 02775, true) && !is_dir($newDir)) { throw new RuntimeException("Verzeichnis konnte nicht angelegt werden: " . $newDir); } // 3. Für die Nachvollziehbarkeit protokollieren. @file_put_contents( $context["app_root"] . "/data/update-history.log", sprintf( "%s %s -> %s (Migrationen: %s)%s", date(DATE_ATOM), $context["from_version"] !== "" ? $context["from_version"] : "unbekannt", $context["to_version"], $context["migrations"] === [] ? "keine" : implode(", ", $context["migrations"]), PHP_EOL, ), FILE_APPEND | LOCK_EX, ); // Fehler melden: Exception werfen, false zurückgeben oder // return ["success" => false, "error" => "…"]. }