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 ($file0);
       
$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 ($ifalse); // 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;
    }
}

?>
2007-04-16 19:40:35
http://php5.kiev.ua/manual/ru/ref.dbase.html
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
2009-02-12 09:16:31
http://php5.kiev.ua/manual/ru/ref.dbase.html

    Поддержать сайт на родительском проекте КГБ