dBase
- Введение
- Установка и настройка
- Предопределенные константы
- dBase
- dbase_add_record — Добавляет запись в базу данных
- dbase_close — Закрывает базу данных
- dbase_create — Создает базу данных
- dbase_delete_record — Удаление записей из базы данных
- dbase_get_header_info — Получает информацию о свойствах полей базы данных
- dbase_get_record_with_names — Получает запись из базы данных в виде ассоциативного массива
- dbase_get_record — Получает записи из базы данных, как из индексированного массива
- dbase_numfields — Получает количество полей базы данных
- dbase_numrecords — Получает количество записей в базе данных
- dbase_open — Открывает базу данных
- dbase_pack — Фиксирует удаление из базы данных
- dbase_replace_record — Заменяет запись в базе данных
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- CUBRID
- DB++
- dBase
- filePro
- Firebird/InterBase
- FrontBase
- IBM DB2, Cloudscape and Apache Derby
- Informix
- Ingres DBMS, EDBC, and Enterprise Access Gateways
- MaxDB
- MongoDB
- MongoDB
- mSQL
- Microsoft SQL Server
- MySQL Drivers and Plugins
- Oracle OCI8
- Paradox File Access
- PostgreSQL
- SQLite
- SQLite3
- Microsoft SQL Server Driver for PHP
- Sybase
- tokyo_tyrant
Коментарии
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.
Erich