dBase
Примеры
Большинство примеров в документации требуют наличие базы данных dBase. Мы будем использовать /tmp/test.dbf ,которую создали в примере с dbase_create().
Содержание
- 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 — Заменяет запись в базе данных
Коментарии
I know lots of you dosent really use dbase, but i've builded a class to help the one how dose.
(sorry for bad english)
- dbase.php
<?php
set_time_limit (0);
// site_path defined by parent
require_once (SITE_PATH. '/server/php/libs/dbase/handler.php');
/* DBase (dbf)
* manage dbf files, exports and search functionality
* with buildin optimizers for fast performance
*/
class DBase
{
private $handler = false;
private $searchopt = array (); // Search optimizer
private function unload ()
{
if ($this-> handler !== false)
unset ($this-> handler);
}
public function __construct ($file = false)
{
if ($file !== false)
$this-> load ($file);
}
public function __destruct ()
{
$this-> unload ();
}
public function load ($file)
{
$resource = dbase_open ($file, 0);
$this-> handler = new DBase_Handler ($resource);
return $this-> handler;
}
/* Search
* search for string inside header
* returns record number
* false returned if not found or error occurred
* limit_results gets int or false, limit_results equels one will limit the
* search results for one result only, false for no limit
*/
public function search ($headerText, $string, $limit_results = false, $handler = false)
{
if ($handler === false)
$handler = $this-> handler;
if ($this-> searchopt [$headerText][$string])
return $this-> searchopt [$headerText][$string];
else
{
$size = $handler-> getSize ();
if ( ( $headerNumber = $handler-> getHeaderNumber ($headerText) ) !== false)
{
$results = array ();
for ($i = 1; $i < $size; $i++)
{
$record = $handler-> getRecord ($i, false); // Disabled optimizer to prevent memory overflow
if (trim ($record [$headerNumber]) == $string)
{
$results[] = $i;
if ( ($limit_results !== false) && (sizeof ($results) == $limit_results) )
break;
}
}
if (sizeof ($results) > 0)
{
$this-> searchopt [$headerText][$string] = $results;
return $this-> search ($headerText, $string, $handler);
}
return false;
} else
return false;
}
}
}
?>
- dbase_handler.php
<?php
/* DBase Handler (dbf)
* handles dbase resource
*/
class DBase_Handler
{
private $resource;
private $size; // Records Count
private $header = array ();
private $dataopt = array (); // Data optimizer
private function setHeader ()
{
$this-> header = dbase_get_header_info ($this-> resource);
}
public function __construct ($resource)
{
$this-> resource = $resource;
$this-> setHeader ();
$this-> size = dbase_numrecords ($this-> resource);
}
public function __destruct ()
{
dbase_close ($this-> resource);
}
public function getRecord ($record_number, $dataopt = true)
{
if ($record_number > $this-> size)
return false;
else
{
if ($this-> dataopt [$record_number])
return $this-> dataopt [$record_number];
else
{
$record = dbase_get_record ($this-> resource, $record_number);
if ($dataopt === true) // Data saving optimizer
{
$this-> dataopt [$record_number] = $record;
return $this-> getRecord ($record_number);
} else
return $record;
}
}
}
public function getHeaderNumber ($headerText)
{
foreach ($this-> header as $index => $header)
{
if ($header ['name'] == $headerText)
{
return $index;
break;
}
}
return false;
}
public function getHeader ($headerNumber)
{
if ($headerNumber <= sizeof ($this-> header))
return $this-> header [$headerNumber];
else
return false;
}
public function getSize ()
{
return $this-> size;
}
}
?>
some of you contacted me about memo fields and my script, so i'll just post my answers on the common question here.
(note: this is not an adv for any program, only what i used for myself, and it's free)
so, there are 2 options if you want to create/read memo fields:
1. use a library for java/c++/c# to build a bridge between php and dbf file. i've used dbf2java. althougth it's not near complete as my other option, it's a good start. (http://code.google.com/p/dbf2java-library/)
2. use an external program with pipes to grab the output. i used cdbflite, (http://www.whitetown.com/cdbflite/). it's free, and pretty much gives you everything you need to handle those dbf files. i'm not sure about big databases and it seems you need to register/buy it, but it's again, a start.
hope it helps some of you who needs to handle those database files,
Good luck,
idan