Signatur
Beschreibung
dba_sync() veranlasst die DBA-Bibliothek, alle im Puffer gehaltenen Schreiboperationen in die zugrunde liegende Datenbankdatei zu schreiben. Dies ist besonders wichtig, wenn mehrere Prozesse gleichzeitig auf eine Datenbank zugreifen oder wenn sichergestellt werden soll, dass Daten nach einer Reihe von Schreibvorgängen dauerhaft persistiert sind.
Die Funktion arbeitet mit dem Handler-Ressource-Objekt, das von dba_open() oder dba_popen() zurückgegeben wurde. Nicht alle DBA-Handler unterstützen diese Operation gleichermaßen — bei einigen Backends ist dba_sync() ein No-Op, der stets true zurückgibt.
Typische Einsatzszenarien sind das explizite Sichern von Daten nach einem Batch-Import oder nach kritischen Schreibvorgängen, um Datenverlust bei einem unerwarteten Programmabbruch zu vermeiden. In vielen Fällen wird dba_sync() kurz vor dba_close() aufgerufen.
Ab PHP 8.4 wird der Parameter als typisiertes Dba\Connection-Objekt erwartet; in älteren PHP-Versionen handelt es sich um eine resource.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $dba Pflicht | Dba\Connection | Das Verbindungs-Handle der Datenbank, das von dba_open() oder dba_popen() zurückgegeben wurde. |
Rückgabewert
true zurück, wenn die Synchronisierung erfolgreich war, andernfalls false.Beispiele
Datenbank nach Schreibvorgängen synchronisieren
<?php
$db = dba_open('/tmp/beispiel.db', 'c', 'gdbm');
if ($db === false) {
die('Datenbank konnte nicht geöffnet werden.');
}
// Mehrere Datensätze einfügen
dba_insert('schluessel1', 'wert1', $db);
dba_insert('schluessel2', 'wert2', $db);
dba_insert('schluessel3', 'wert3', $db);
// Ausstehende Schreibvorgänge auf den Datenträger synchronisieren
if (dba_sync($db)) {
echo 'Datenbank erfolgreich synchronisiert.' . PHP_EOL;
} else {
echo 'Fehler beim Synchronisieren der Datenbank.' . PHP_EOL;
}
dba_close($db);
Synchronisierung in einem Batch-Import-Szenario
<?php
$db = dba_open('/tmp/produkte.db', 'c', 'db4');
if ($db === false) {
die('Datenbank konnte nicht geöffnet werden.');
}
$produkte = [
'prod_001' => 'Apfel',
'prod_002' => 'Birne',
'prod_003' => 'Kirsche',
];
foreach ($produkte as $id => $name) {
dba_replace($id, $name, $db);
}
// Nach dem Batch-Import explizit synchronisieren
if (!dba_sync($db)) {
error_log('Warnung: DBA-Synchronisierung fehlgeschlagen!');
}
echo 'Import abgeschlossen. ' . count($produkte) . ' Produkte gespeichert.' . PHP_EOL;
dba_close($db);
// Wichtig · Fallstricke
Handler-Kompatibilität: Nicht alle DBA-Handler implementieren dba_sync() sinnvoll. Bei Handlern wie flatfile oder cdb kann die Funktion lediglich true zurückgeben, ohne tatsächlich etwas zu schreiben. Prüfen Sie die Dokumentation des verwendeten Handlers.
Parallelzugriffe: Wenn mehrere Prozesse gleichzeitig auf dieselbe DBA-Datei zugreifen, sollte dba_sync() zusammen mit einem geeigneten Sperrmechanismus (z. B. dba_open() mit dem Modus 'l' für Schreibsperre) verwendet werden, um Dateninkonsistenz zu vermeiden.
PHP 8.4: Ab PHP 8.4 wurde die interne Ressource durch das Objekt Dba\Connection ersetzt. Code, der eine resource erwartet, muss entsprechend angepasst werden.