ไลบรารีอย่างง่ายสำหรับการจัดการกับฐานข้อมูล 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 ;
}
หากข้อมูลใน DB ไม่ได้อยู่ใน UTF-8 คุณสามารถระบุชุดอักขระเพื่อแปลงข้อมูลจาก:
use TotalCRM DBase TableReader ;
$ table = new TableReader (
' test.dbf ' ,
[
' encoding ' => ' cp1251 '
]
);
นอกจากนี้ยังสามารถอ่านบันทึกช่วยจำจากไฟล์เฉพาะได้อีกด้วย เพียงตรวจสอบให้แน่ใจว่ามีไฟล์ .fpt ที่มีชื่อเดียวกันกับฐานข้อมูลหลักอยู่
คุณสามารถส่งอาร์เรย์ของคอลัมน์ที่คุณต้องการไปยัง Constructor ได้ ถ้าตารางของคุณมีคอลัมน์ที่คุณไม่ได้ใช้ คอลัมน์เหล่านั้นก็จะไม่ถูกโหลด วิธีนี้ parser สามารถทำงานได้เร็วขึ้นมาก
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