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

search for in the

dbase_add_record> <dba_sync
Last updated: Tue, 27 Nov 2007

view this page in

Funciones para dBase

Introducción

Estas funciones permiten el acceso a datos almacenados en bases de datos con formato dBase (dbf).

Los archivos dBase son simplemente archivos secuenciales que contienen registros de anchura fija. Los registros se van añadiendo al final del archivo y los registros borrados se mantienen en el archivo hasta que se llama a la función dbase_pack().

Los tipos de campos de dBase disponibles son los siguientes:

Tipos de campos disponibles
Campo Tipo dBase Formato Información adicional
M Memo n/d Este tipo no está soportado por PHP, por lo que los campos de este tipo se ignoran
D Date YYYYMMDD La longitud del campo está limitada a 8
N Number Un número Se tiene que declarar la longitud y la precisión (esto es, el número de dígitos detrás del punto decimal)
C String Una cadena Se debe declarar la longitud. Cuando se obtienen los datos, la cadena se rellena con espacios por la derecha si es necesario para obtener la misma longitud que la declarada.
L Boolean T o Y indica TRUE, F o N indica FALSE Se almacena y se devuelve como un entero (1 o 0)

Warning

No hay soporte para índices o campos Memo. Tampoco hay soporte para bloqueo: si dos procesos concurrentes en el servidor modifican el mismo archivo dBase, probablemente se destruirán los datos.

Se recomienda no utilizar archivos dBase como bases de datos, sino elegir cualquier servidor SQL; » MySQL o » Postgres son opciones habituales con PHP. El soporte para dBase se proporciona para permitir importar y exportar datos a y desde la base de datos web, ya que este formato de ficheros es aceptado habitualmente por las hojas de cálculo y los organizadores de Windows.

Instalación

Para habilitar la librería dbase incluida y para poder utilizar estas funciones, se debe compilar PHP con la opción --enable-dbase.

Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración en php.ini.

Tipos de recursos

Esta extensión no tiene ningún tipo de recurso definido.

Ejemplos

Muchos de los ejemplos de esta referencia requieren una base de datos de tipo dBase. En los ejemplos se empleará el archivo /tmp/test.dbf que se crea en el ejemplo de la función dbase_create().

Constantes predefinidas

Esta extensión no tiene ninguna constante definida.

Table of Contents



add a note add a note User Contributed Notes
dBase
bi.idan AT gmail.com
17-Apr-2007 02: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 08: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: Tue, 27 Nov 2007
 
 
show source | credits | sitemap | contact | advertising | mirror sites