Signatur
Beschreibung
dbase_create() legt eine neue dBASE-kompatible Datenbankdatei (DBF-Format) am angegebenen Dateipfad an. Die Struktur der Datenbank wird durch ein Array von Felddefinitionen bestimmt, das Name, Typ, Länge und gegebenenfalls Dezimalstellen für jedes Feld enthält.
Die Funktion gibt bei Erfolg eine Datenbankressource zurück, die für weitere Operationen wie dbase_add_record(), dbase_get_record() oder dbase_close() verwendet werden kann. Im Fehlerfall wird false zurückgegeben. Die erstellte Datei muss am Ende immer mit dbase_close() geschlossen werden, um alle Änderungen korrekt zu speichern.
Die dBASE-Erweiterung ist nützlich, wenn Daten mit Legacy-Systemen ausgetauscht werden müssen, die das DBF-Format lesen oder schreiben (z. B. ältere ERP-Systeme, GIS-Software oder Office-Anwendungen wie LibreOffice Calc). Die Erweiterung ist nicht standardmäßig aktiviert und muss beim Kompilieren von PHP mit --enable-dbase eingebunden oder als PECL-Paket installiert werden.
Zulässige Feldtypen sind: N (numerisch), C (Zeichen/String), D (Datum), L (logisch/Boolean) und M (Memo). Nicht alle DBF-Reader unterstützen alle Typen gleichermaßen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur zu erstellenden DBF-Datei. Wird die Datei bereits existieren, wird sie überschrieben. Der Prozess benötigt Schreibrechte auf das Zielverzeichnis. | |
| $fields Pflicht | array | Ein numerisch indiziertes Array von Felddefinitionen. Jedes Element ist selbst ein Array der Form [Name, Typ, Länge, Dezimalstellen]. Der Feldname darf maximal 10 Zeichen lang sein. Gültige Typen: C (Character), N (Numeric), D (Date), L (Logical), M (Memo). Dezimalstellen sind nur bei Typ N relevant. |
Rückgabewert
false zurückgegeben.Beispiele
Einfache Adressdatenbank erstellen
<?php
// Felddefinitionen: [Name, Typ, Länge, Dezimalstellen]
$fields = [
['VORNAME', 'C', 50, 0],
['NACHNAME', 'C', 50, 0],
['PLZ', 'C', 10, 0],
['ORT', 'C', 50, 0],
['ALTER', 'N', 3, 0],
['AKTIV', 'L', 1, 0],
['GEBURTSTAG','D', 8, 0],
];
$dbf = dbase_create('/tmp/adressen.dbf', $fields);
if ($dbf === false) {
echo "Fehler: Datenbank konnte nicht erstellt werden.\n";
exit(1);
}
// Datensatz hinzufügen
dbase_add_record($dbf, [
'Max',
'Mustermann',
'12345',
'Musterstadt',
42,
true,
'19820315', // YYYYMMDD
]);
dbase_close($dbf);
echo "Datenbank erfolgreich erstellt und Datensatz gespeichert.\n";
Produktdatenbank mit numerischen Feldern erstellen
<?php
$felder = [
['ARTNR', 'C', 20, 0],
['BEZEICH', 'C', 80, 0],
['PREIS', 'N', 9, 2], // bis 9999999,99
['BESTAND', 'N', 6, 0],
['AKTIV', 'L', 1, 0],
];
$db = dbase_create('/tmp/produkte.dbf', $felder);
if (!$db) {
throw new RuntimeException('Konnte Produktdatenbank nicht erstellen.');
}
$produkte = [
['ART-001', 'Schraubenzieher', 4.99, 150, true],
['ART-002', 'Hammer', 12.50, 80, true],
['ART-003', 'Säge (alt)', 8.00, 0, false],
];
foreach ($produkte as $p) {
dbase_add_record($db, $p);
}
$anzahl = dbase_numrecords($db);
echo "Datensätze gespeichert: {$anzahl}\n";
dbase_close($db);
// Wichtig · Fallstricke
Verfügbarkeit: Die dBASE-Erweiterung ist seit PHP 5.3 nicht mehr im Core enthalten und muss als PECL-Paket (dbase) installiert werden. Prüfen Sie die Verfügbarkeit mit extension_loaded('dbase').
Überschreiben: Wenn die angegebene Datei bereits existiert, wird sie ohne Warnung überschrieben. Prüfen Sie vorab mit file_exists(), ob die Datei bereits vorhanden ist, wenn ein unbeabsichtigtes Überschreiben verhindert werden soll.
Zeichenkodierung: Das DBF-Format speichert Strings in der Systemkodierung. Bei Umlauten oder Sonderzeichen kann es zu Problemen kommen, wenn die Datei mit Software geöffnet wird, die eine andere Kodierung erwartet (z. B. CP850 statt UTF-8). Gegebenenfalls vorher mb_convert_encoding() verwenden.
Feldbeschränkungen: Feldnamen dürfen maximal 10 Zeichen lang sein und sollten nur alphanumerische Zeichen sowie Unterstriche enthalten. Leerzeichen und Sonderzeichen im Feldnamen führen zu Fehlern.