Pustaka sederhana untuk menangani database dbf seperti dBase dan FoxPro. Ini adalah port kelas PHPXbase yang ditulis oleh Erwin Kooi, diperbarui ke kode yang sesuai dengan PSR-2 dan disesuaikan untuk kinerja dan untuk memecahkan beberapa masalah yang dimiliki kode asli.
Anda dapat menginstalnya melalui Komposer:
$ composer require totalcrm/php-dbf
Lebih banyak sampel di folder examle
.
use TotalCRM DBase TableReader ;
$ table = new TableReader ( ' test.dbf ' );
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
//or
echo $ record -> my_column ;
}
Jika data dalam DB tidak dalam UTF-8 Anda dapat menentukan rangkaian karakter untuk mengonversi data dari:
use TotalCRM DBase TableReader ;
$ table = new TableReader (
' test.dbf ' ,
[
' encoding ' => ' cp1251 '
]
);
Dimungkinkan juga untuk membaca Memo dari file khusus. Pastikan saja file .fpt dengan nama yang sama dengan database utama ada.
Anda dapat meneruskan array kolom yang Anda perlukan ke konstruktor, kemudian jika tabel Anda memiliki kolom yang tidak Anda gunakan, kolom tersebut tidak akan dimuat. Dengan cara ini parser dapat berjalan lebih cepat.
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 ;
}
Jika Anda sudah mengetahui tipe kolomnya, Anda juga bisa memanggil fungsi khusus tipe untuk kolom tersebut, yang juga akan meningkatkan kecepatannya.
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
echo $ record -> get ( ' another_column ' );
}
Untuk membuka tabel untuk diedit, Anda harus menggunakan objek TableEditor
, seperti pada contoh ini:
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 ();
Untuk membuat file tabel Anda perlu menggunakan objek 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
Saya bukan ahli dBase dan saya tidak tahu semua tipe dan versi bidang secara spesifik, jadi lib mungkin tidak dapat menangani beberapa situasi. Jika Anda menemukan kesalahan, silakan buka masalah dan kirimkan saya tabel contoh agar saya dapat mereproduksi masalah Anda, dan saya akan mencoba membantu.
Deskripsi Format File Xbase
Struktur File untuk dBASE 7
STRUKTUR FILE DBF DAN DBT/FPT