Start · Sprachen · PHP · Referenz · dbase_open

dbase_open

Funktion

Öffnet eine dBASE-Datenbankdatei (.dbf) und gibt eine Ressource zurück, über die anschließend auf die Datensätze zugegriffen werden kann.

seit PHP 5.0.0 Kategorie: db

Signatur

dbase_open(string $path, int $mode): resource|false

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

Typ
resource|false
Beschreibung
Bei Erfolg eine Datenbankressource (ab PHP 8: ein Datenbankobjekt), die als Handle für alle weiteren dbase-Funktionen verwendet wird. Im Fehlerfall (z. B. Datei nicht gefunden oder fehlende Berechtigung) wird 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);
Anzahl Datensätze: 3 Müller, Berlin Schmidt, Hamburg Meier, München

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);
Datensatz erfolgreich hinzugefügt.

// 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.