dBase 函数
在线手册:中文  英文

dbase_get_header_info

(PHP 5)

dbase_get_header_infoGets the header info of a database

说明

array dbase_get_header_info ( int $dbase_identifier )

Returns information on the column structure of the given database link identifier.

参数

dbase_identifier

The database link identifier, returned by dbase_open() or dbase_create().

返回值

An indexed array with an entry for each column in the database. The array index starts at 0.

Each array element contains an associative array of column information, as described here:

name
The name of the column
type
The human-readable name for the dbase type of the column (i.e. date, boolean, etc.)
length
The number of bytes this column can hold
precision
The number of digits of decimal precision for the column
format
A suggested printf() format specifier for the column
offset
The byte offset of the column from the start of the row

If the database header information cannot be read, FALSE is returned.

范例

Example #1 Showing header information for a dBase database file

<?php
// Path to dbase file
$db_path "/tmp/test.dbf";

// Open dbase file
$dbh dbase_open($db_path0)
  or die(
"Error! Could not open dbase database file '$db_path'.");

// Get column information
$column_info dbase_get_header_info($dbh);

// Display information
print_r($column_info);
?>


dBase 函数
在线手册:中文  英文

用户评论:

Marcos Peli (2009-04-16 18:13:32)

Um dos principais problemas era a flata desta fun??o nas vers?es PHP<5.0

O Script abaixo "contorna" o problema , e gera uma "pseudo-cabe?ario" baseado no próprio conteúdo do arquivo DBF

?bvio informar que se o arquivo DBF a ser submetido ao script estiver vazio , ou com poucos elementos ou linhas , ou ainda , se estes n?o representarem o conteudo com fidegnidade , ou seja , com muitos campos NULLs , o script podera n?o funcionar a contento com rela??o ao resultado desejado.

Utilizei por muito tempo o script abaixo como alternativa para a ausência da fun??o dbase-get-header-info em vers?es PHP < 5.0 na confec??o de cabe?arios e posterior transforma??o de arquivo DBF p/ MYSQL

<?php
// parametros iniciais

// Path - caminho para arquivo dbf a ser aberto
$diretorio_open 'dbf/';
// Arquivo a ser aberto e explorado
$file 'arquivo.dbf';

$con dbase_open($diretorio_open.$file,0) or die('Erro na Conex?o com o arquivo DBF');

// PHP>5.0 - usa fun??o dbase_get_header_info para ler cabe?ario
// PHP<5.0 - Simula a leitura através do conteudo do próprio arquivo
if(function_exists(dbase_get_header_info))    
{
$estrutura_arquivo dbase_get_header_info($con);}                
else    
{
$estrutura_arquivo alternative_dbase_get_header_info($con);}

// imprime o header do arquivo
print_r($estrutura_arquivo);

// ---------------------------------------------

// fun??o alternativa
function alternative_dbase_get_header_info($con)
{

    
//Pega o num. de linhas
    
$rows dbase_numrecords($con);
    
    
//faz o loop percorrendo todas as linhas e carrega a variável $registro com os dados
    
for($i=1;$i<=$rows;$i++) 
    {
        
//Pega a linha do arquivo DBF e coloca como array
        
$registro dbase_get_record_with_names($con,$i); 
            
        
$y=0;
                
        
// Mostra as Chaves e os valores do array
        
foreach ($registro as $chave => $valor)
        {
            
// pega as chaves (field - Coluna) só se for a primeira vez
            
if($i==1)
            {
$estrutura_arquivo[$y]['name'] = $chave;}
    
            
// finalmente pega o tipo , o comprimento e a precis?o no mesmo padr?o que dbase_get_header_info
            
if( ( ( ( @checkdate(substr($valor,4,2),substr($valor,-2),substr($valor,0,4)) ) && (strlen(trim($valor))==8) ) || (strlen(trim($valor))==0) ) && $chave != 'deleted'// testa se é data checkdate(MM,DD,AA)
            
{
                if(!isset(
$estrutura_arquivo[$y]['type']))
                {
                    
$estrutura_arquivo[$y]['type'] = 'date';
                    
$estrutura_arquivo[$y]['length'] = 8;
                    
$estrutura_arquivo[$y]['precision'] = '0';
                }
                
$e_data TRUE;
            }
            if(
is_numeric(trim($valor)) && strstr($valor'.'))
            {
                
$estrutura_arquivo[$y]['type'] = 'number';
                if(
$estrutura_arquivo[$y]['length'] < strlen(trim($valor)))
                {
$estrutura_arquivo[$y]['length'] = strlen(trim($valor));}
                if(
$estrutura_arquivo[$y]['precision'] < strlen(strstr(trim($valor),'.'))-1)
                {
$estrutura_arquivo [$y]['precision'] = strlen(strstr(trim($valor),'.'))-1;}
            }
            if(
is_numeric(trim($valor)) && !strstr($valor'.') && !$e_data && $estrutura_arquivo[$y]['precision'] < && $estrutura_arquivo[$y]['type'] != 'character')
            {
                
$estrutura_arquivo[$y]['type'] = 'number';
                if(
$estrutura_arquivo[$y]['length'] < strlen(trim($valor)))
                {
$estrutura_arquivo[$y]['length'] = strlen(trim($valor));}
                
$estrutura_arquivo [$y]['precision'] = '0';
            }
            if( 
strlen($valor)>10 || (!is_numeric(trim($valor)) && strlen(trim($valor))!=0) )
            {
                
$estrutura_arquivo[$y]['type'] = 'character';
                if(
$estrutura_arquivo[$y]['length'] < strlen($valor))
                {
$estrutura_arquivo[$y]['length'] = strlen($valor);}
                
$estrutura_arquivo [$y]['precision'] = '0';
            }
                
            
$e_data FALSE;
            
$y+=1;
        }
            
    }
        
    return(
estrutura_arquivo);
}
?>

Eliovir (2008-07-24 05:04:15)

As of PHP 5.2.6, it seems that the type F (Float) is supported ( ext/dbase/dbase.c +713 ), with a length of 20 characters.
http://www.dbase.com/KnowledgeBase/int/db7_file_fmt.htm precises : Number stored as a string, right justified, and padded with blanks to the width of the field

christoph dot eck at bluewin dot ch (2006-09-12 03:58:26)

Field Types
*********
Not all field types of DBase are supported. Look below for the internal field type definitions of PHP 5.1.x.
The storage symbols of DBase are C (stands for character), D (date) , I (integer), N (number), L (boolean), M (memo). All other symbols like B, @, l, +, F, O and G are defined as unknown.
Sources
*********
http://www.dbase.com/KnowledgeBase/int/db7_file_fmt.htm
PHP-Source-5.1.6 ext/dbase/dbase.c (line 786)

易百教程