Как просматривать реестры foxpro с помощью php - PullRequest
3 голосов
/ 23 марта 2012

не могли бы вы мне помочь?Мне нужно показать реестр таблицы .dbf в php и иметь следующий код:

<html>
    <form method="get">
        <input type="text" name="nrdoc"></input>
        <input type="submit"></input>
    </form>

<?php
if(isset ($_GET['nrdoc'])){
$thefile = "winges/vcabdoc.DBF";
if($thefile){
include('./dbf_class.php');
$dbf = new dbf_class($thefile);
$num_rec=$dbf->dbf_num_rec;
$field_num=$dbf->dbf_num_field;
$endexct = $timer->end();

    echo("<blockquote>File Name : $thefile<br>Number of Records : $num_rec<br>Number of Fields : $field_num</blockquote>");
    echo('<table border=1 cellspacing=0>');
    echo('<tr>');
    echo('<td>No.&nbsp;</td>'); 

    for($j=0; $j<$field_num; $j++){
        echo '<td>&nbsp;'.$dbf->dbf_names[$j]['name'];
            if ($dbf->dbf_names[$j]['type']!='M') {
                echo '<br>Length='.$dbf->dbf_names[$j]['len'];
            }
        echo '<br>Type='.$dbf->dbf_names[$j]['type'].'</td>';
    }
    echo '</tr>';


    $i=$_GET['nrdoc'];
        if ($row === $dbf->getRow("SELECT *, FROM winges/vcabdoc.dbf WHERE 'VCANUM' == $i")) {
            echo('<tr>');
            echo('<td align="right">'.str_pad($i+1, 3, "0", STR_PAD_LEFT).'</td>');
                for($j=0; $j<$field_num; $j++){
                    if ($dbf->dbf_names[$j]['type']=='N') {
                        echo '<td align="right">';
                    } 
                    else {
                        echo '<td align="left">';
                    }
            echo htmlentities($row[$j]).'&nbsp;</td>';
            }
            echo '<tr>';
        }
}
    echo('</table>');
}
?>
</html>

dbf_class.php из http://www.phpclasses.org

И он всегда возвращает первые данныестрока в базе данных, пожалуйста, помогите мне.

Заранее спасибо.

Жуан

1 Ответ

1 голос
/ 28 марта 2012

Я нашел простой способ извлечь данные из .dbf с помощью библиотеки perl XBASE Используя эту библиотеку, я написал небольшие скрипты, которые читают данный файл и выводят строку json.

# foxpro2json.pl
use File::Basename;
use XBase;
$filename=$ARGV[0]; 

my $table = new XBase $filename or die XBase->errstr;
my @fields = $table->field_names;
my $cursor = $table->prepare_select();
my $return = '';
my $i = 0;

while (my @row = $cursor->fetch) {
  $json = '{';
  $i = 0;
  foreach $val (@row) {
    $val =~ s/(['"\/\\])/\\$1/g;
    $json .= '"'.$fields[$i].'":"'.$val.'",';
    $i++;
  }
  $json  = substr($json, 0, -1);
  $json .= '},';
  $return .= $json;
}
$return  = substr($return, 0, -1);
print '['.$return.']';

Вот как я называю этот файл внутри моего php-кода:

exec('/usr/bin/perl /var/www/foxpro2json.pl /var/www/myfilename.dbf', $json);
$array = json_decode($json[0], true);
...