Start · Sprachen · PHP · Referenz · ibase_restore

ibase_restore

Funktion

Leitet eine Wiederherstellungsaufgabe einer Firebird/InterBase-Datenbank über den Service Manager ein und kehrt sofort zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_restore(resource $service_handle, string $source_file, string $dest_db, int $options = 0, bool $verbose = false): mixed

Beschreibung

ibase_restore() sendet einen Wiederherstellungsauftrag an den Firebird- oder InterBase-Service-Manager. Die Funktion stellt eine zuvor mit ibase_backup() erstellte Sicherungsdatei in einer neuen oder vorhandenen Datenbank wieder her. Der Service-Manager führt den Prozess im Hintergrund aus, sodass die Funktion unmittelbar nach der Auftragsübergabe zurückkehrt, ohne auf den Abschluss zu warten.

Eine Verbindung zum Service-Manager wird mit ibase_service_attach() hergestellt und liefert das erforderliche $service_handle. Nach dem Aufruf von ibase_restore() sollte die Verbindung mit ibase_service_detach() wieder freigegeben werden.

Durch die verschiedenen $options-Flags lässt sich das Wiederherstellungsverhalten steuern, etwa ob Indizes während der Wiederherstellung erstellt werden sollen, ob eine bereits vorhandene Zieldatenbank überschrieben werden darf (IBASE_RES_CREATE) oder ob Transaktionsprotokolle berücksichtigt werden. Die Flags können per bitweisem ODER kombiniert werden.

Hinweis: Die gesamte ibase_*-Erweiterung (alias interbase) wurde mit PHP 8.0 aus dem PHP-Kern entfernt. Sie ist seitdem nur noch über die externe PECL-Erweiterung ibase verfügbar. Für neue Projekte sollte stattdessen die Firebird PDO-Erweiterung verwendet werden.

Parameter

Name Typ Default Beschreibung
$service_handle Pflicht resource Eine aktive Verbindung zum Service-Manager, die zuvor mit ibase_service_attach() geöffnet wurde.
$source_file Pflicht string Absoluter Pfad zur Sicherungsdatei auf dem Server, die wiederhergestellt werden soll (z. B. /var/backup/mydb.fbk).
$dest_db Pflicht string Absoluter Pfad oder Alias der Zieldatenbank, in die die Sicherung wiederhergestellt werden soll (z. B. /var/data/mydb.fdb).
$options int 0 Optionale Bitmaske aus IBASE_RES_*-Konstanten, z. B. IBASE_RES_CREATE (überschreibt vorhandene Datenbank), IBASE_RES_DEACTIVATE_IDX (deaktiviert Indizes während der Wiederherstellung) oder IBASE_RES_NO_SHADOW. Mehrere Flags können per | kombiniert werden.
$verbose bool false Wenn true, gibt die Funktion detaillierte Fortschrittsinformationen des Service-Managers aus.

Rückgabewert

Typ
mixed
Beschreibung
Gibt true zurück, wenn der Wiederherstellungsauftrag erfolgreich an den Service-Manager übergeben wurde. Bei $verbose = true kann die Ausgabe direkt an den Client gesendet werden. Im Fehlerfall wird false zurückgegeben.

Beispiele

Einfache Datenbankwiederherstellung

<?php
// Verbindung zum Service-Manager herstellen
$service = ibase_service_attach('localhost', 'sysdba', 'masterkey');

if ($service === false) {
    die('Service-Manager-Verbindung fehlgeschlagen.');
}

// Wiederherstellung einleiten
$result = ibase_restore(
    $service,
    '/var/backup/shop.fbk',   // Quelldatei (Backup)
    '/var/data/shop_new.fdb', // Zieldatenbank
    IBASE_RES_CREATE          // Vorhandene DB überschreiben
);

if ($result) {
    echo 'Wiederherstellungsauftrag erfolgreich übergeben.';
} else {
    echo 'Fehler beim Einleiten der Wiederherstellung.';
}

// Verbindung freigeben
ibase_service_detach($service);
Wiederherstellungsauftrag erfolgreich übergeben.

Wiederherstellung mit deaktivierten Indizes und Verbose-Ausgabe

<?php
// Verbindung zum Service-Manager herstellen
$service = ibase_service_attach('db.example.com', 'sysdba', 'masterkey');

if ($service === false) {
    die('Keine Verbindung zum Service-Manager möglich.');
}

// Flags kombinieren: Vorhandene DB überschreiben + Indizes erst nach Restore anlegen
$options = IBASE_RES_CREATE | IBASE_RES_DEACTIVATE_IDX;

// Mit verbose=true: Service-Manager gibt Fortschrittsinfos aus
ibase_restore(
    $service,
    '/backups/crm_2024.fbk',
    '/databases/crm_restored.fdb',
    $options,
    true // Verbose
);

ibase_service_detach($service);
echo PHP_EOL . 'Wiederherstellung abgeschlossen (oder im Hintergrund aktiv).';

// Wichtig · Fallstricke

Sicherheit: Stellen Sie sicher, dass Pfadangaben für Quell- und Zieldatei niemals direkt aus Benutzereingaben stammen, da dies zu Path-Traversal-Angriffen führen kann. Validieren und bereinigen Sie alle Pfade vor der Übergabe an die Funktion.

Deprecation / Entfernung: Die ibase_*-Funktionen wurden in PHP 7.4 als veraltet markiert und mit PHP 8.0 vollständig aus dem PHP-Kern entfernt. Für PHP 8+ ist die PECL-Erweiterung php-interbase oder der Umstieg auf PDO_Firebird erforderlich.

Hintergrundausführung: Die Funktion kehrt sofort zurück. Der eigentliche Wiederherstellungsprozess läuft asynchron im Service-Manager. Um den Status zu prüfen, kann ibase_service_query() verwendet werden.

Berechtigungen: Der Datenbankbenutzer muss über ausreichende Rechte verfügen (typischerweise SYSDBA), um Wiederherstellungen über den Service-Manager durchführen zu dürfen.