Der Client funktioniert eigenständig über die Kommandozeile. Zusätzlich lässt er sich in drei Stufen in das Projekt einbinden – von "gar nicht" bis "vollständig".
Relevante Dateien:
manage-client/lib/client.php – einziger Einstiegspunkt, lädt alles Weiteremanage-client/ui/panel.php – vollständige Oberflächemanage-client/ui/status-partial.php – kleiner Statusblockmanage-client/bin/manage-client.php – Kommandozeile für CronNichts zu tun. Der Client wird ausschließlich über die Kommandozeile bedient und das Projekt weiß nichts von ihm. Nur der Ordner muss vorhanden und konfiguriert sein.
Diese Stufe genügt, wenn Updates und Backups von einer Person mit Shell-Zugang gepflegt werden.
ui/panel.php ist eine fertige Seite. Sie erwartet, dass das Projekt seine
eigene Anmeldung bereits geprüft hat, bevor die Datei eingebunden wird.
Neue Datei admin/manage.php im Projekt:
<?php
require_once __DIR__ . "/../config.php";
require_once __DIR__ . "/../includes/functions.php";
// Anmeldung des Projekts – hier steht, was das Projekt ohnehin verwendet.
if (empty($_SESSION["admin_logged_in"])) {
header("Location: login.php");
exit;
}
require __DIR__ . "/../manage-client/ui/panel.php";
Das Panel bringt eine eigene Prüfung auf $_SESSION["admin_logged_in"] mit, damit
ein direkter Aufruf nicht ungeschützt ist. Verwendet das Projekt ein anderes
Session-Flag, gibt es zwei Möglichkeiten:
ui/panel.php anpassen (der Ordner wird ohnehin pro Projekt gepflegt), oderdefine("MANAGE_PANEL_SKIP_AUTH_GUARD", true); setzen, wenn die
Anmeldung im aufrufenden Skript bereits sichergestellt ist.Die zweite Variante deaktiviert nur die zusätzliche Prüfung des Panels. Wer sie setzt, ohne vorher selbst zu prüfen, veröffentlicht Update- und Backup-Funktionen im Internet.
Für eine Einstellungsseite genügt oft der kleine Block:
<?php
$manageStatusPanelUrl = "manage.php";
include __DIR__ . "/../manage-client/ui/status-partial.php";
?>
Er rendert nur ein Fragment, wirft nie eine Exception und zeigt Version, Update-Verfügbarkeit, letztes Backup und offene Migrationen.
Alle Funktionen aus 04_FUNCTION_API können direkt aufgerufen werden:
require_once __DIR__ . "/manage-client/lib/client.php";
// z. B. auf dem Admin-Dashboard: automatisches Backup, wenn fällig
manageBackupCreateAutomaticIfDue();
Dieser Aufruf ist die Variante für Hosting ohne Cron: Er erstellt ein Backup, wenn
seit dem letzten automatischen Backup MANAGE_BACKUP_AUTO_INTERVAL_SECONDS vergangen
sind, und gibt sonst sofort null zurück. Ein Backup dauert je nach Datenmenge
mehrere Sekunden – deshalb gehört der Aufruf auf eine selten geladene Adminseite,
nicht auf jede Seite des Projekts.
Cron ist der empfohlene Weg. Beispielzeilen liegen in
examples/cron/manage-client.cron:
# Backup, jede Nacht um 03:20 Uhr
20 3 * * * /usr/bin/php /pfad/zum/projekt/manage-client/bin/manage-client.php backup --trigger=cron --quiet
# Statusmeldung an den Manage-Server, stündlich
7 * * * * /usr/bin/php /pfad/zum/projekt/manage-client/bin/manage-client.php heartbeat --quiet
# Update-Prüfung, werktags um 08:00 Uhr (Exit 2 = Update verfügbar)
0 8 * * 1-5 /usr/bin/php /pfad/zum/projekt/manage-client/bin/manage-client.php check --quiet
--quiet unterdrückt die normale Ausgabe; Fehler gehen weiterhin auf STDERR und
werden von Cron per Mail zugestellt. Updates werden bewusst nicht automatisch
eingespielt: update bleibt eine bewusste Entscheidung.
Ins .gitignore des Projekts gehören:
manage-client/config.php
data/manage/
Der übrige Inhalt von manage-client/ soll eingecheckt werden, damit er Teil
des Release-Pakets ist und mit ausgerollt wird.
PHP braucht Schreibrechte auf:
data/manage/backups/ – lokale Archivedata/manage/work/ – Arbeitsverzeichnis für Updates (wird nach jedem Lauf geleert)data/manage/updates/ – Sicherungskopien der überschriebenen DateienFehlen Schreibrechte im Anwendungsstamm, schlägt ein Update mittendrin fehl. Siehe 09_TROUBLESHOOTING.
Diese Verzeichnisse dürfen nicht über das Web erreichbar sein. Bei Apache erledigt
das üblicherweise die .htaccess des Projekts; das mitgelieferte
manage-client/.htaccess schützt zusätzlich config.php, lib/ und bin/.