downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

dbase_add_record> <dba_sync
Last updated: Wed, 22 Jul 2009

view this page in

dBase Functions

Introductie

These functions allow you to access records stored in dBase-format (dbf) databases.

dBase files are simple sequential files of fixed length records. Records are appended to the end of the file and delete records are kept until you call dbase_pack().

The types of dBase fields available are:

Available types of fields
Field dBase Type Format Additional information
M Memo n/a This type is not supported by PHP, such field will be ignored
D Date YYYYMMDD The field length is limited to 8
N Number A number You must declare a length and a precision (the number of digits after the decimal point)
C String A string You must declare a length. When retrieving data, the string will be right-padded with spaces to fit the declared length.
L Boolean T or Y for TRUE, F or N for FALSE Stored and returned as an integer (1 or 0)
F Float A float number Support for this type of field was added in PHP 5.2.0

Warning

There is no support for indexes or memo fields. There is no support for locking, too. Two concurrent web server processes modifying the same dBase file will very likely ruin your database.

We recommend that you do not use dBase files as your production database. Choose any real SQL server instead; » MySQL or » Postgres are common choices with PHP. dBase support is here to allow you to import and export data to and from your web database, because the file format is commonly understood by Windows spreadsheets and organizers.

Installatie

In order to enable the bundled dbase library and to use these functions, you must compile PHP with the --enable-dbase option.

Configuratie tijdens scriptuitvoer

Deze extensie gebruikt geen configuratie regels.

Resource types

Deze extensie maakt geen gebruik van resources.

Voorbeelden

Many examples in this reference require a dBase database. We will use /tmp/test.dbf that will be created in the example of dbase_create().

Voorgedefinieerde constanten

Deze extensie definieert geen constanten.

Table of Contents



dbase_add_record> <dba_sync
Last updated: Wed, 22 Jul 2009
 
add a note add a note User Contributed Notes
dBase
bi.idan [at] gmail.com
12-Feb-2009 04:16
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
kuthullu at webmails dot com
09-Apr-2008 04:40
For all those of you who wants to DBF->SQL, here's half of a hour worth of work.
It's pretty simple, outputs a CREATE TABLE and lots of INSERTs.
The output is HTML, as I use w$ndows here at work and prefer to just see results in opera.
You SHOULD verify the created data, add some CREATE KEYs, NOT NULLs or whatever you like.

<?php
$file_name
= "mfiscal/dados22/APISS110.D00";
$table = "dbf_apiss";

$dbf = @dbase_open($file_name, 0) or die("Error opening $file_name");
$fields = dbase_get_header_info($dbf);

/* Just show a table with header information */
echo "<table cellspacing=0><tr><th>Name</th><th>Type</th>
<th>Length</th><th>Precision</th><th>Format</th><th>Offset</th></tr>"
;
foreach(
$fields as $field)
{
    echo
"<tr>
        <td>
{$field['name']}</td>
        <td>
{$field['type']}</td>
        <td>
{$field['length']}</td>
        <td>
{$field['precision']}</td>
        <td>
{$field['format']}</td>
        <td>
{$field['offset']}</td>
        </tr>"
;
}
echo
"</table><br><br>";

/* Here begins the SQL code part */
echo "CREATE TABLE $table (<BR>";
$x = 0;
$fields_num = 0;
foreach(
$fields as $field)
{
    if(
$x++ != 0)
        echo
",<BR>";
    switch(
$field['type'])
    {
        case
'character' : $type = 'CHAR'; $length = $field['length'] > 1 ? "({$field['length']})" : ""; break;
        case
'number' : $type = 'NUMERIC'; $length = "({$field['length']}" . ($field['precision'] > 0 ? ", {$field['precision']})": ")");
        break;
//        case '' : $type = ''; break;
   
}
   
$fields_num++;
    echo
"&nbsp;&nbsp;&nbsp;{$field['name']} $type$length";
}
echo
");<BR><BR>BEGIN;<BR>";
$records = @dbase_numrecords($dbf) or die("Error reading DBF's number of fields");
for(
$x = 1; $x <= $records; $x++)
{
   
$record = dbase_get_record($dbf, $x);
    echo
"INSERT INTO $table VALUES (";
   
$f = 0;
    foreach(
$record as $field)
    {
        if(
$f != 0) echo ", ";
        if(
strcmp(str_repeat(' ', $fields[$f]['length']), $field) != 0)
        {
            if(
$fields[$f]['type'] == 'character') echo "'";
            echo
$field;
            if(
$fields[$f]['type'] == 'character') echo "'";
        }
        else
            echo
"NULL";
        if(++
$f >= $fields_num) break;
    }
    echo
");<BR>";
}
echo
"COMMIT;";
?>
bi.idan AT gmail.com
17-Apr-2007 01:40
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;
    }
}

?>
Hadi Rusiah / deegos at yahoo dot com
08-May-2004 07:33
If you are using PHP < 5, you can use this function to retrieve dbf header

<?
function get_dbf_header($dbfname) {
  
$fdbf = fopen($dbfname,'r');

  
$dbfhdrarr = array();
  
$buff32 = array();
  
$i = 1;
  
$goon = true;

   while (
$goon) {
      if (!
feof($fdbf)) {
        
$buff32 = fread($fdbf,32);
         if (
$i > 1) {
            if (
substr($buff32,0,1) == chr(13)) {
              
$goon = false;
            } else {
              
$pos = strpos(substr($buff32,0,10),chr(0));
              
$pos = ($pos == 0?10:$pos);

              
$fieldname = substr($buff32,0,$pos);
              
$fieldtype = substr($buff32,11,1);
              
$fieldlen = ord(substr($buff32,16,1));
              
$fielddec = ord(substr($buff32,17,1));

array_push($dbfhdrarr, array($fieldname,$fieldtype,$fieldlen,$fielddec));

            }
         }
        
$i++;
      } else {
        
$goon = false;
      }
   }

  
fclose($fdbf);
   return(
$dbfhdrarr);
}

$arr = get_dbf_header('/data/file.dbf');
print_r($arr);
?>

dbase_add_record> <dba_sync
Last updated: Wed, 22 Jul 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites