Miha-ingener
Новичок
Написание функций чтения/записи в DBF-файл (как в модуле php_dbase.dll)
Вот такой занимаюсь задачей - необходимо написать функции для чтения/записи/удаления/замены данных в DBF-файлах.
Есть в php стандартный модуль - php_dbase.dll он может следующее:
dbase_numrecords -- Find out how many records are in a dBase database
dbase_get_record_with_names -- Gets a record from a dBase database as an associative array
dbase_get_record -- Gets a record from a dBase database
dbase_add_record -- Add a record to a dBase database
dbase_replace_record -- Replace a record in a dBase database
dbase_delete_record -- Deletes a record from a dBase database
dbase_create -- Creates a dBase database
dbase_pack -- Packs a dBase database
dbase_open -- Opens a dBase database
dbase_close -- Close a dBase database
dbase_get_header_info -- Get the header info of a dBase database
dbase_numfields -- Find out how many fields are in a dBase database
Считать количество записей, считывать, записывать, заменять записи и т.д.
Проблема вот в чём - поддержка этого модуля невозможна на серверах с ОС FREEBSD. Поэтому мне хочется написать такие же функции, выполняющие тоже самое и подключать их на тех хостингах, где нет поддержки этого модуля.
Вот что уже получилось написать:
Первые 3 из списка выше удалось реализовать - показываю две. Помогите, пожалуйста, написать и другие функции...
Вот такой занимаюсь задачей - необходимо написать функции для чтения/записи/удаления/замены данных в DBF-файлах.
Есть в php стандартный модуль - php_dbase.dll он может следующее:
dbase_numrecords -- Find out how many records are in a dBase database
dbase_get_record_with_names -- Gets a record from a dBase database as an associative array
dbase_get_record -- Gets a record from a dBase database
dbase_add_record -- Add a record to a dBase database
dbase_replace_record -- Replace a record in a dBase database
dbase_delete_record -- Deletes a record from a dBase database
dbase_create -- Creates a dBase database
dbase_pack -- Packs a dBase database
dbase_open -- Opens a dBase database
dbase_close -- Close a dBase database
dbase_get_header_info -- Get the header info of a dBase database
dbase_numfields -- Find out how many fields are in a dBase database
Считать количество записей, считывать, записывать, заменять записи и т.д.
Проблема вот в чём - поддержка этого модуля невозможна на серверах с ОС FREEBSD. Поэтому мне хочется написать такие же функции, выполняющие тоже самое и подключать их на тех хостингах, где нет поддержки этого модуля.
Вот что уже получилось написать:
PHP:
// Функция, считывающая КОЛИЧЕСТВО записей в DBF-файле
function dbase_numrecords($dbfname) {
$fdbf=fopen($dbfname,'r');
$fields = array();
$buf = fread($fdbf,32);
$header=unpack("VRecordCount/vFirstRecord/vRecordLength", substr($buf,4,8));
print $header['RecordCount'];
fclose($fdbf); }
// Функция, считывающая СТРОКУ в виде массива из DBF-файла
function dbase_get_record($dbfname,$number) {
$fdbf=fopen($dbfname,'r');
$fields = array();
$buf = fread($fdbf,32);
$header=unpack( "VRecordCount/vFirstRecord/vRecordLength", substr($buf,4,8));
$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));
$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);
if ($i==$number) {$record=array_values($record); print"<pre>"; print_r($record);}
} //raw record
fclose($fdbf); }