مكتبة بسيطة للتعامل مع قواعد بيانات dbf مثل dBase وFoxPro. إنه منفذ لفئة PHPXbase كتبه Erwin Kooi، وتم تحديثه إلى كود متوافق مع PSR-2 وتم تعديله لتحسين الأداء ولحل بعض المشكلات التي واجهها الكود الأصلي.
يمكنك تثبيته من خلال Composer:
$ composer require totalcrm/php-dbf
المزيد من العينات في مجلد examle
.
use TotalCRM DBase TableReader ;
$ table = new TableReader ( ' test.dbf ' );
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
//or
echo $ record -> my_column ;
}
إذا لم تكن البيانات الموجودة في قاعدة البيانات بتنسيق UTF-8، فيمكنك تحديد مجموعة أحرف لتحويل البيانات منها:
use TotalCRM DBase TableReader ;
$ table = new TableReader (
' test.dbf ' ,
[
' encoding ' => ' cp1251 '
]
);
من الممكن أيضًا قراءة المذكرات من الملفات المخصصة. فقط تأكد من وجود ملف .fpt بنفس اسم قاعدة البيانات الرئيسية.
يمكنك تمرير مصفوفة من الأعمدة التي تحتاجها إلى المُنشئ، ثم إذا كان الجدول الخاص بك يحتوي على أعمدة لا تستخدمها، فلن يتم تحميلها. بهذه الطريقة يمكن للمحلل أن يعمل بشكل أسرع بكثير.
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 ;
}
إذا كنت تعرف نوع العمود بالفعل، فيمكنك أيضًا استدعاء الوظيفة الخاصة بالنوع لهذا الحقل، مما يزيد من السرعة أيضًا.
while ( $ record = $ table -> nextRecord ()) {
echo $ record -> get ( ' my_column ' );
echo $ record -> get ( ' another_column ' );
}
لفتح جدول للتحرير، عليك استخدام كائن TableEditor
، كما في هذا المثال:
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 ();
لإنشاء ملف جدول، يجب عليك استخدام كائن 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
أنا لست خبيرًا في dBase ولا أعرف كل تفاصيل أنواع الحقول وإصداراتها، لذا قد لا يتمكن lib من التعامل مع بعض المواقف. إذا وجدت خطأ، يرجى فتح مشكلة وإرسال نموذج جدول لي حتى أتمكن من إعادة إنتاج مشكلتك، وسأحاول تقديم المساعدة.
وصف تنسيق ملف Xbase
هيكل الملف لـ dBASE 7
هيكل ملف DBF وDBT/FPT