Eine einfache Bibliothek für den Umgang mit DBF- Datenbanken wie dBase und FoxPro. Es handelt sich um eine von Erwin Kooi geschriebene Portierung der PHPXbase-Klasse, die auf einen PSR-2-kompatiblen Code aktualisiert und hinsichtlich der Leistung und zur Lösung einiger Probleme des ursprünglichen Codes optimiert wurde.
Sie können es über Composer installieren:
$ composer require totalcrm/php-dbf
Weitere Beispiele im examle
.
use TotalCRM DBase TableReader ;
$ table = new TableReader ( ' test.dbf ' );
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
//or
echo $ record -> my_column ;
}
Wenn die Daten in der Datenbank nicht in UTF-8 vorliegen, können Sie einen Zeichensatz angeben, aus dem die Daten konvertiert werden sollen:
use TotalCRM DBase TableReader ;
$ table = new TableReader (
' test.dbf ' ,
[
' encoding ' => ' cp1251 '
]
);
Es ist auch möglich, Memos aus dedizierten Dateien zu lesen. Stellen Sie einfach sicher, dass eine .fpt- Datei mit demselben Namen wie die Hauptdatenbank vorhanden ist.
Sie können ein Array der benötigten Spalten an den Konstruktor übergeben. Wenn Ihre Tabelle dann Spalten enthält, die Sie nicht verwenden, werden diese nicht geladen. Auf diese Weise kann der Parser viel schneller laufen.
use TotalCRM DBase TableReader ;
$ table = new TableReader (
' test.dbf ' ,
[
' columns ' => [ ' my_column ' , ' another_column ' ]
]
);
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> my_column ;
echo $ record -> another_column ;
}
Wenn Sie den Spaltentyp bereits kennen, können Sie auch die typspezifische Funktion für dieses Feld aufrufen, was ebenfalls die Geschwindigkeit erhöht.
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
echo $ record -> get ( ' another_column ' );
}
Um eine Tabelle zum Bearbeiten zu öffnen, müssen Sie ein TableEditor
Objekt verwenden, wie in diesem Beispiel:
use TotalCRM DBase TableEditor ;
$ table = new TableEditor ( ' test.dbf ' );
for ( $ i = 0 ; $ i < 10 ; $ i ++) {
$ record = $ table -> nextRecord ();
$ record -> set ( ' field ' , ' string ' );
//or
$ record -> field = ' string ' ;
$ table -> writeRecord ();
}
$ table
-> save ()
-> close ();
use TotalCRM DBase TableEditor ;
$ table = new TableEditor (
' file.dbf ' ,
[
' editMode ' => TableEditor:: EDIT_MODE_CLONE , //default
]
);
$ record = $ table -> appendRecord ();
$ record -> set ( ' name ' , ' test name ' );
$ record -> set ( ' age ' , 20 );
$ table
-> writeRecord ()
-> save ()
-> close ();
use TotalCRM DBase TableEditor ;
$ table = new TableEditor ( ' file.dbf ' );
while ( $ record = $ table -> nextRecord ()) {
if ( $ record -> get ( ' delete_this_row ' )) {
$ table -> deleteRecord (); //mark record deleted
}
}
$ table
-> pack () //remove deleted rows
-> save () //save changes
-> close ();
Um eine Tabellendatei zu erstellen, müssen Sie das TableCreator
Objekt verwenden.
use TotalCRM DBase Enum FieldType ;
use TotalCRM DBase Enum TableType ;
use TotalCRM DBase Header Column ;
use TotalCRM DBase Header HeaderFactory ;
use TotalCRM DBase TableCreator ;
use TotalCRM DBase TableEditor ;
// you can specify any other database version from TableType
$ header = HeaderFactory:: create (TableType:: DBASE_III_PLUS_MEMO );
$ filepath = ' /path/to/new/file.dbf ' ;
$ tableCreator = new TableCreator ( $ filepath , $ header );
$ tableCreator
-> addColumn ( new Column ([
' name ' => ' name ' ,
' type ' => FieldType:: CHAR ,
' length ' => 20 ,
]))
-> addColumn ( new Column ([
' name ' => ' birthday ' ,
' type ' => FieldType:: DATE ,
]))
-> addColumn ( new Column ([
' name ' => ' is_man ' ,
' type ' => FieldType:: LOGICAL ,
]))
-> addColumn ( new Column ([
' name ' => ' bio ' ,
' type ' => FieldType:: MEMO ,
]))
-> addColumn ( new Column ([
' name ' => ' money ' ,
' type ' => FieldType:: NUMERIC ,
' length ' => 20 ,
' decimalCount ' => 4 ,
]))
-> addColumn ( new Column ([
' name ' => ' image ' ,
' type ' => FieldType:: MEMO ,
]))
-> save (); //creates file
$ table = new TableEditor ( $ filepath );
//... add records
Ich bin kein dBase-Experte und kenne nicht alle Besonderheiten der Feldtypen und -versionen, daher kann die Bibliothek einige Situationen möglicherweise nicht bewältigen. Wenn Sie einen Fehler finden, öffnen Sie bitte ein Problem und senden Sie mir eine Beispieltabelle, damit ich Ihr Problem reproduzieren kann, und ich werde versuchen, Ihnen zu helfen.
Beschreibung des Xbase-Dateiformats
Dateistruktur für dBASE 7
DBF- UND DBT/FPT-DATEISTRUKTUR