Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
// Определяем путь для файла
$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";