dBase
在线手册:中文  英文

dBase 函数

范例

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().

Table of Contents


dBase
在线手册:中文  英文

用户评论:

bi.idan [at] gmail.com (2009-02-12 07:16:31)

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 (2008-04-09 07:40:08)

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_name0) 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'] > "({$field['length']})" ""; break;
        case 
'number' $type 'NUMERIC'$length "({$field['length']}. ($field['precision'] > ", {$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 (2007-04-16 16:40:35)

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;
    }
}

?>

Hadi Rusiah / deegos at yahoo dot com (2004-05-08 10:33:27)

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);
?>

易百教程