Unfortunately the dbase functions are not compiled into my commercial server's php and I needed to read some geo data in shape files, which include data in dbfs.
So maybe this will help some others:
<?php
function echo_dbf($dbfname) {
$fdbf = fopen($dbfname,'r');
$fields = array();
$buf = fread($fdbf,32);
$header=unpack( "VRecordCount/vFirstRecord/vRecordLength", substr($buf,4,8));
echo 'Header: '.json_encode($header).'<br/>';
$goon = true;
$unpackString='';
while ($goon && !feof($fdbf)) { // read fields:
$buf = fread($fdbf,32);
if (substr($buf,0,1)==chr(13)) {$goon=false;} // end of field list
else {
$field=unpack( "a11fieldname/A1fieldtype/Voffset/Cfieldlen/Cfielddec", substr($buf,0,18));
echo 'Field: '.json_encode($field).'<br/>';
$unpackString.="A$field[fieldlen]$field[fieldname]/";
array_push($fields, $field);}}
fseek($fdbf, $header['FirstRecord']+1); // move back to the start of the first record (after the field definitions)
for ($i=1; $i<=$header['RecordCount']; $i++) {
$buf = fread($fdbf,$header['RecordLength']);
$record=unpack($unpackString,$buf);
echo 'record: '.json_encode($record).'<br/>';
echo $i.$buf.'<br/>';} //raw record
fclose($fdbf); }
?>
This function simply dumps an entire file using echo and json_encode, so you can tweak it to your own needs... (eg random access would just be a matter of changing the seek to : fseek($fdbf, $header['FirstRecord']+1 +($header['RecordLength']* $desiredrecord0based); removing the for loop and returning $record
This function doesn't do any type conversion, but it does extract the type if you need to play with dates, or tidy up the numbers etc.
So quick and dirty but maybe of use to somebody and illustrates the power of unpack.
ErichdBase
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
dBase
Референца за `book.dbase.php` со подобрена типографија и навигација.
dBase
Вовед
Забелешка:
Овој екстензија е преместен во (достапно од PHP 7.2.0) repository and is no longer bundled with PHP as of PHP 5.3.0.
repository и повеќе не е вклучен со PHP од PHP 5.3.0.
Овие функции ви овозможуваат пристап до записи зачувани во бази на податоци во формат dBase (dbf). Препорачуваме да не користите dBase датотеки како ваша продукциска база на податоци. Користете » SQLite или изберете кој било вистински SQL сервер наместо тоа; or » MySQL » Postgres
се вообичаени избори со PHP. Поддршката за dBase е тука за да ви овозможи да увезувате и извезувате податоци од и до вашата веб база на податоци, бидејќи формат на датотеката е општо разбран од Windows табеларни пресметки и организатори. flock()Од dbase 7.0.0 базите на податоци автоматски се заклучуваат преку
. Немало поддршка за заклучување порано, така што два истовремени веб сервер процеси кои модифицираат иста dBase датотека многу веројатно би ја уништиле вашата база на податоци. Ова може да се случи дури и со dbase 7.0.0+ на системи кои ги имплементираат заклучувањата на ниво на процес со мултитредирани SAPIs. dbase_pack().
dBase датотеките се едноставни секвенцијални датотеки со записи со фиксна должина. Записите се додаваат на крајот од датотеката, а избришаните записи се задржуваат додека не го повикате
| Достапни типови на полиња | Поле | Формат | dBase Тип |
|---|---|---|---|
M |
Дополнителни информации | n/a | Memo |
D |
Датум | YYYYMMDD |
Овој тип не е поддржан од PHP, таквото поле ќе биде игнорирано |
T |
DateTime | YYYYMMDDhhmmss.uuu |
Должината на полето е ограничена на 8 |
N |
Број | Број | Мора да декларирате должина и прецизност (број на цифри по децималната точка). |
F |
Пловечки | Број со пловечка запирка | Исто како N. |
C |
Низа | Низ | Мора да декларирате должина. При преземање податоци, низата ќе биде дополнета со празни места од десната страна за да одговара на декларираната должина. Предолгите низи ќе бидат тивко скратени при складирање податоци. |
L |
Буловска вредност |
T or Y for true,
F or N for false,
? за неиницијализирано.
|
Од dbase 7.0.0, се враќа како bool (true or false), или null за неиницијализирани полиња. Претходно, се враќаше како int (1 or 0).
|
Забелешка:
Од dbase 7.0.0 се поддржуваат полиња што може да бидат NULL за
DBASE_TYPE_FOXPROбази на податоци. Ако полето може да биде NULL, поминувањеnullќе го постави соодветното знаменце, а при подоцнежно преземање вредноста на полето ќе бидеnull.
Забелешка:
Нема поддршка за индекси или мемо полиња.
- Installing/Configuring
- Претходно дефинирани константи
- dBase Функции
- dbase_add_record — Додава запис во база на податоци
- dbase_close — Затвора база на податоци
- dbase_create — Создава база на податоци
- dbase_delete_record — Брише запис од база на податоци
- dbase_get_header_info — Ги добива информациите од заглавието на базата на податоци
- dbase_get_record — Ги добива записите од базата на податоци како индексирана низа
- dbase_get_record_with_names — Ги добива записите од базата на податоци како асоцијативна низа
- dbase_numfields — Го добива бројот на полиња во базата на податоци
- dbase_numrecords — Го добива бројот на записи во базата на податоци
- dbase_open — Го добива бројот на записи во базата на податоци
- dbase_pack — Отвора база на податоци
- dbase_replace_record — Пакува база на податоци