php dbf
1.0.5
dBase 및 FoxPro와 같은 dbf 데이터베이스를 처리하기 위한 간단한 라이브러리입니다. 이는 Erwin Kooi가 작성한 PHPXbase 클래스의 포트로, 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 파일이 있는지 확인하세요.
필요한 열의 배열을 생성자에 전달할 수 있으며, 테이블에 사용하지 않는 열이 있으면 해당 열은 로드되지 않습니다. 이렇게 하면 파서가 훨씬 더 빠르게 실행될 수 있습니다.
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 파일 구조