Una biblioteca sencilla para trabajar con bases de datos dbf como dBase y FoxPro. Es una adaptación de la clase PHPXbase escrita por Erwin Kooi, actualizada a un código compatible con PSR-2 y ajustada para mejorar el rendimiento y resolver algunos problemas que tenía el código original.
Puedes instalarlo a través de Composer:
$ composer require totalcrm/php-dbf
Más muestras en la carpeta examle
.
use TotalCRM DBase TableReader ;
$ table = new TableReader ( ' test.dbf ' );
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
//or
echo $ record -> my_column ;
}
Si los datos en la base de datos no están en UTF-8, puede especificar un juego de caracteres para convertir los datos:
use TotalCRM DBase TableReader ;
$ table = new TableReader (
' test.dbf ' ,
[
' encoding ' => ' cp1251 '
]
);
También es posible leer notas de archivos dedicados. Solo asegúrese de que exista el archivo .fpt con el mismo nombre que la base de datos principal.
Puede pasar una matriz de las columnas que necesita al constructor, luego, si su tabla tiene columnas que no usa, no se cargarán. De esta forma, el analizador puede ejecutarse mucho más rápido.
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 ;
}
Si ya conoce el tipo de columna, también puede llamar a la función específica del tipo para ese campo, lo que también aumenta la velocidad.
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
echo $ record -> get ( ' another_column ' );
}
Para abrir una tabla para editarla, debe usar un objeto TableEditor
, como en este ejemplo:
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 ();
Para crear un archivo de tabla, necesita utilizar el objeto TableCreator
.
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
No soy un experto en dBase y no conozco todos los detalles de los tipos y versiones de campos, por lo que es posible que la biblioteca no pueda manejar algunas situaciones. Si encuentra un error, abra un problema y envíeme una tabla de muestra que pueda reproducir su problema e intentaré ayudarlo.
Descripción del formato de archivo Xbase
Estructura de archivos para dBASE 7
ESTRUCTURA DE ARCHIVOS DBF Y DBT/FPT