DBF в CSV PHP

Просмотрщиков DBF не так много, один из вариантов это открыть в Openoffice (Libreoffice) Calc но это не всегда получается. Другой вариант использовать специальные программы. Особенно проблемно это с Linux систем. Один из вариантов — это конвертировать в CSV. Один из способов это сделать с помощью PHP.

Конвертирование

<?php
set_time_limit( 24192000 );
ini_set( 'memory_limit', '-1' );

$files = glob( '/path/to/*.DBF' );
foreach( $files as $file )
{
    echo "Processing: $file\n";
    $fileParts = explode( '/', $file );
    $endPart = $fileParts[key( array_slice( $fileParts, -1, 1, true ) )];
    $csvFile = preg_replace( '~\.[a-z]+$~i', '.csv', $endPart );

    if( !$dbf = dbase_open( $file, 0 ) ) die( "Could not connect to: $file" );
    $num_rec = dbase_numrecords( $dbf );
    $num_fields = dbase_numfields( $dbf );

    $fields = array();
    $out = '';

    for( $i = 1; $i <= $num_rec; $i++ )
    {
        $row = @dbase_get_record_with_names( $dbf, $i );
        $firstKey = key( array_slice( $row, 0, 1, true ) );
        foreach( $row as $key => $val )
        {
            if( $key == 'deleted' ) continue;
            if( $firstKey != $key ) $out .= ';';
            $out .= trim( $val );
        }
        $out .= "\n";
    }

    file_put_contents( $csvFile, $out );
}

тут /path/to/ необходимо заменить на свой путь
либо 5 строку заменить на код

$path = $argv[1] ?? null;

if (empty($path) || !file_exists($path)) {
    throw new Exception("file path not found", 1);    
}

if (is_dir($path)) {
    $files = glob( '*.DBF' );
} else {
    $files = [$path];
}

тогда можно запускать из консоли. В качестве параметра можно указывать как конкретный файл, так и папку. Результат преобразования окажется рядом со скриптом.

php convert.php ../MYFILE.DBF

Зависимости

для конвертирования используется модуль dbase
можно установить через pecl

sudo pecl install dbase
# установить pecl если не установлен
sudo apt install php-dev

Источники

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.