Задать вопрос
  • Как создать dbf файл в php?

    @Berllinn
    <?php
    // Определяем путь для файла
    $filePath = __DIR__ . '/file.dbf';

    // Открываем файл для записи
    $fp = fopen($filePath, 'wb');
    if (!$fp) {
    die("Не удалось создать файл: $filePath\n");
    }

    // Определяем структуру полей
    $fields = [
    ['ID', 'N', 5],
    ['NAME', 'C', 50],
    ['PRICE', 'N', 10, 2],
    ];

    // Создаем заголовок DBF
    $header = pack('C4', 3, date('Y') - 1900, date('n'), date('j')); // Версия DBF и текущая дата
    $header .= pack('V', 3); // Количество записей
    $header .= pack('v', 32 + count($fields) * 32 + 1); // Длина заголовка
    $header .= pack('v', 5 + 50 + 10); // Длина одной записи
    $header .= str_repeat(chr(0), 20); // Зарезервировано

    foreach ($fields as $field) {
    $header .= str_pad($field[0], 11, chr(0)); // Имя поля (до 11 символов)
    $header .= $field[1]; // Тип поля
    $header .= pack('V', 0); // Зарезервировано
    $header .= pack('C', $field[2]); // Длина поля
    $header .= pack('C', $field[3] ?? 0); // Количество десятичных знаков (только для 'N')
    $header .= str_repeat(chr(0), 14); // Зарезервировано
    }

    // Завершаем заголовок
    $header .= chr(13); // Конец определения полей

    // Записываем заголовок в файл
    fwrite($fp, $header);

    // Добавляем записи
    $records = [
    [1, 'Product A', 100.50],
    [2, 'Product B', 200.00],
    [3, 'Product C', 300.75],
    ];

    foreach ($records as $record) {
    $recordData = ' '; // Маркер активности записи
    $recordData .= str_pad($record[0], 5, ' ', STR_PAD_LEFT); // ID (число, выровнено вправо)
    $recordData .= str_pad($record[1], 50, ' ', STR_PAD_RIGHT); // NAME (строка, выровнена влево)
    $recordData .= str_pad(number_format($record[2], 2, '.', ''), 10, ' ', STR_PAD_LEFT); // PRICE (число)
    fwrite($fp, $recordData);
    }

    // Завершаем файл
    fwrite($fp, chr(26)); // EOF-маркер
    fclose($fp);

    echo "DBF файл успешно создан: $filePath\n";
    Написано