Signatur
Beschreibung
dbase_open öffnet eine bestehende dBASE-III-Datenbankdatei (Dateiformat .dbf) und gibt eine Ressource zurück, die bei allen weiteren dbase-Funktionen als Handle verwendet wird. Der Zugriffsmodus steuert, ob die Datei nur gelesen, gelesen und geschrieben oder exklusiv geöffnet werden soll.
Die Funktion ist Teil der dbase-Erweiterung, die standardmäßig nicht aktiviert ist und separat kompiliert oder als PECL-Paket installiert werden muss. Sie eignet sich vor allem für Legacy-Systeme, die noch dBASE-Dateien als Austauschformat verwenden, etwa ältere Buchhaltungs- oder Warenwirtschaftssysteme.
Nach dem Öffnen können Datensätze mit Funktionen wie dbase_get_record, dbase_add_record oder dbase_delete_record gelesen und verändert werden. Die Datei sollte nach der Verwendung stets mit dbase_close geschlossen werden, um Ressourcen freizugeben und Datenverlust zu vermeiden.
Ab PHP 7.0 wurde die dbase-Erweiterung aus dem PHP-Kern entfernt und ist nur noch als PECL-Erweiterung verfügbar. Ab PHP 8 gibt dbase_open statt einer Ressource ein Objekt zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Dateisystempfad zur .dbf-Datei, die geöffnet werden soll. Kann relativ oder absolut angegeben werden. | |
| $mode Pflicht | int | Zugriffsmodus: 0 = nur lesen, 1 = nur schreiben, 2 = lesen und schreiben. Einige Implementierungen unterstützen außerdem 3 für exklusiven Schreibzugriff. |
Rückgabewert
false zurückgegeben.Beispiele
Datenbank öffnen und alle Datensätze ausgeben
<?php
// dbase-Erweiterung muss installiert und aktiviert sein
$db = dbase_open('/var/data/adressen.dbf', 0); // schreibgeschützt öffnen
if ($db === false) {
echo 'Fehler: Datenbank konnte nicht geöffnet werden.';
exit;
}
$anzahl = dbase_numrecords($db);
echo "Anzahl Datensätze: $anzahl\n";
for ($i = 1; $i <= $anzahl; $i++) {
$datensatz = dbase_get_record_with_names($db, $i);
if (!$datensatz['deleted']) {
echo $datensatz['NAME'] . ', ' . $datensatz['ORT'] . "\n";
}
}
dbase_close($db);
Datenbank im Schreib-/Lesemodus öffnen und Datensatz hinzufügen
<?php
$db = dbase_open('/var/data/produkte.dbf', 2); // lesen und schreiben
if ($db === false) {
die('Datenbank konnte nicht geöffnet werden.');
}
// Feldstruktur abfragen
$felder = dbase_get_header_info($db);
// Neuen Datensatz hinzufügen (Felder: ARTNUM, BEZEICHNG, PREIS)
$neuerDatensatz = [
'1042',
'Schraubendreher',
'4.99',
];
if (dbase_add_record($db, $neuerDatensatz)) {
echo 'Datensatz erfolgreich hinzugefügt.';
} else {
echo 'Fehler beim Hinzufügen des Datensatzes.';
}
dbase_close($db);
// Wichtig · Fallstricke
Verfügbarkeit: Die dbase-Erweiterung ist seit PHP 5.3.0 als PECL-Paket ausgelagert und seit PHP 7.0 nicht mehr im PHP-Kern enthalten. Sie muss explizit installiert werden (pecl install dbase).
Sicherheit: Der $path-Parameter sollte niemals direkt aus Benutzereingaben übernommen werden, da dies Path-Traversal-Angriffe ermöglicht. Pfade stets validieren und auf erlaubte Verzeichnisse beschränken.
PHP 8: Ab PHP 8 gibt die Funktion kein resource mehr zurück, sondern ein Objekt. Prüfungen wie is_resource($db) funktionieren dann nicht mehr – stattdessen $db !== false verwenden.
Zeichenkodierung: dBASE-Dateien verwenden häufig ältere Zeichensätze wie CP850 oder CP437. Eine Konvertierung z. B. mit iconv oder mb_convert_encoding kann notwendig sein, um Umlaute korrekt darzustellen.