Start · Sprachen · PHP · Referenz · dbase_create

dbase_create

Funktion

Erstellt eine neue dBASE-Datenbankdatei (.dbf) mit der angegebenen Feldstruktur und gibt eine Datenbankressource zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

dbase_create(string $filename, array $fields): resource|false

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

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine dBASE-Datenbankressource zurück, die für nachfolgende dbase-Funktionen verwendet werden kann. Im Fehlerfall (z. B. keine Schreibrechte, ungültige Felddefinition) wird 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";
Datenbank erfolgreich erstellt und Datensatz gespeichert.

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);
Datensätze gespeichert: 3

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