[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Написание функций как и в модуле php_dbase.dll
WR-Script
Вот такой занимаюсь задачей - необходимо написать функции для чтения/записи/удаления/замены данных в 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. Поэтому мне хочется написать такие же функции, выполняющие тоже самое и подключать их на тех хостингах, где нет поддержки этого модуля.

Вот что уже получилось написать:

// Функция, считывающая КОЛИЧЕСТВО записей в 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_with_names($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) {print"<pre>"; print_r($record);}
} //raw record
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); }

Это первые 3 из списка выше. Помоги, пожалуйста, написать и другие функции...



Спустя 1 минута, 27 секунд (18.04.2010 - 16:54) WR-Script написал(а):
Вот как можно написать функцию dbase_add_record -- Add a record to a dBase database - добавления строки данных?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.