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
[edit] Last updated: Mon, 01 Nov 2010

view this page in

XXV. dBase

Introduction

Ces fonctions vous permettront d'accéder aux enregistrements d'une base au format dBase (.dbf).

Les fichiers dBase sont de simples fichiers séquentiels d'enregistrements de longueur fixe. Les enregistrements sont ajoutés à la fin du fichier et les enregistrements supprimés sont conservés jusqu'à l'appel de dbase_pack().

Les types disponibles des champs dBase sont :

Tableau 1. Types de champs disponibles

ChampType dBaseFormatInformations addionnelles
MMemon/aCe type n'est pas supporté par PHP ; ce type de champ sera donc ignoré
DDateYYYYMMDDLa longueur de ce champ est limitée à 8
NNumberUn nombre Vous devez déclarer une longueur et une précision (le nombre de chiffres après le point décimal).
CStringUne chaîne de caractères Vous devez déclarer une longueur. Lors de la récupération de données, la chaîne sera compléter par la droite par des espaces pour arriver à la longueur spécifiée.
LBooleanT ou Y pour TRUE, F ou N pour FALSEStocké et retourné en tant qu'entier (1 ou 0)

Avertissement

dBase ne permet pas l'utilisation d'index, de "memo fields", ni le blocage de la base. Deux processus de serveurs web différents modifiant le même fichier dBase risquent de rendre votre base de données incohérente.

Nous vous recommandons de ne pas utiliser les fichiers dBase comme base de données de production. Choisissez n'importe quel serveur SQL à la place. MySQL et Postgres sont des choix classiques avec PHP. Le support de dBase ne se justifie ici que pour vous permettre d'importer et d'exporter des données depuis et vers votre base de données issues du web, car ce format de fichier est communément accepté par les feuilles et assistants personnes type Windows.

Installation

Pour activer la bibliothèque dBase fournie avec PHP, vous devez compiler PHP avec l'option --enable-dbase.

Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.

Types de ressources

Cette extension ne définit aucune ressource.

Exemples

La plupart des exemples dans cette documentation nécessitent une base de données dBase. Nous utiliserons /tmp/test.dbf qui est créée dans l'exemple de la fonction dbase_create().

Constantes pré-définies

Cette extension ne définit aucune constante.

Table des matières
dbase_add_record -- Ajoute un enregistrement dans une base dBase
dbase_close -- Ferme une base dBase
dbase_create -- Crée une base de données dBase
dbase_delete_record -- Efface un enregistrement dans une base dBase
dbase_get_header_info -- Récupère des informations d'en-tête d'une base de données dBase
dbase_get_record_with_names --  Lit un enregistrement dans une base dBase, sous la forme d'un tableau associatif
dbase_get_record --  Lit un enregistrement dans une base dBase
dbase_numfields -- Compte le nombre de champs d'une base dBase
dbase_numrecords -- Compte le nombre d'enregistrements dans une base dBase
dbase_open -- Ouvre une base dBase
dbase_pack -- Compacte une base dBase
dbase_replace_record -- Remplace un enregistrement dans une base dBase


dbase_add_record> <dba_sync
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes dBase
bi.idan [at] gmail.com 12-Feb-2009 07: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 07: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 16-Apr-2007 04: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 10: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);
?>

 
show source | credits | sitemap | contact | advertising | mirror sites