Конвертация баз MySQL в dBase
Во многих предприятиях, разместивших свои ресурсы в интернете, осталось большое количество программных комплексов и различных скриптов, работающих с данными в формате dBase. Появилась задача обратной совместимости.
Данный класс поможет Вам преобразовывать базы данных MySQL в dBase.
Для работы этого скрипта необходимо, чтобы PHP был скомпилирован с поддержкой dBase. Чтобы узнать это, достаточно вызвать функцию phpinfo(). Если в строке Configure Command сведений о версии PHP есть параметр --enable-dbase, значит Ваша версия поддерживает dBase (можно также посмотреть в разделе Additional Modules наличие строки dBase).
class ConvdBase
{
var $conv_dir; // каталог конвертации - здесь будут DBF-файлы
var $struct; // структура текущей таблицы,
// используется при конвертации данных
function ConvdBase($dir)
{
$this->setoutdir($dir);
}
// имя поля и его тип формата MySQL преобразуем к dBase
// например: code int(10), преобразуем к array('code', 'N', 10, 0)
// если $mysql == true, то возвращаем только тип int
// который записывается в $this->struct
function getfield($f_name, $f_type, $mysql = false)
{
$len = 0;
$perc = 0;
$pos = strpos($f_type, '(');
if($pos)
{
$type = strtolower(substr($f_type, 0, $pos));
sscanf(substr($f_type, $pos), '(%d,%d)', &$len, &$perc);
}
else
$type = strtolower($f_type);
if($mysql)
return $type;
switch($type)
{
case 'double': case 'float':
$len = 19; $perc = 3;
$type = 'N';
break;
case 'enum':
$len = 5;
case 'int': case 'tinyint': case 'smallint':
if(!$len)
$len = 19;
$perc = 0;
// break не нужен
case 'decimal':
$type = 'N';
break;
case 'tinytext': case 'text': case 'longtext':
case 'varchar': case 'char':
if(!$len || $len > 254)
$len = 254;
$type = 'C';
break;
case 'year': case 'datetime': case 'timestamp':
$len = $perc = 0;
$type = 'D';
break;
}
$field = array($f_name, $type, $len, $perc);
return $field;
}
// установка исходящего каталога
function setoutdir($dir)
{
$this->conv_dir = $dir;
@mkdir($this->conv_dir, 0777);
}
// конвертация данных
function convertdata($row)
{
$data = array();
for($i = 0; $i struct); $i++)
{
switch($this->struct[$i])
{
case 'year': case 'datetime': case 'timestamp':
$data[] = substr($row[$i], 0, 8);
break;
case 'tinytext': case 'text': case 'longtext':
case 'varchar': case 'char':
if(strlen($row[$i]) > 254)
{
$data[] = substr($row[$i], 0, 254);
break;
}
// break не нужен
case 'smallint': case 'double': case 'float': case 'enum':
case 'int': case 'tinyint': case 'decimal': case 'int':
$data[] = $row[$i];
break;
}
}
return $data;
}
// конвертируем базу
function convert($server, $user, $password, $db_name)
{
// отключить тайм-аут
if( !get_cfg_var('safe_mode') )
set_time_limit(0);
$link = mysql_connect($server, $user, $password);
if(!$link)
exit('Error connect');
mysql_select_db($db_name);
$tables_query = mysql_query('SHOW TABLES', $link);
$tek_table = 0; // порядковый номер таблицы - если обязательно
// требуется имя файла не более 8 символов
while($tables = mysql_fetch_array($tables_query, MYSQL_NUM) )
{
$table = $tables[0];
$field_array = array();
$this->struct = array();
// создаем структуру таблицы
$fields_query = mysql_query('SHOW FIELDS FROM ' . $table);
$tek_field = 0;
while ($field = mysql_fetch_array($fields_query, MYSQL_ASSOC) )
{
$f_name = $field['Field'];
// имена полей dBase не должны быть более 10 символов
if(strlen($f_name) > 10)
$f_name = sprintf('%s%03d', substr($f_name, 0, 7), sizeof($field_array) + 1);
$field_array[] = $this->getfield($f_name, $field['Type']);
$this->struct[] = $this->getfield($tek_field, $field['Type'], true);
}
if(strlen($table) > 8) // см.выше о именах таблиц более 8 символов
$table_name = sprintf('%s%03d', substr($table, 0, 5), $tek_table++);
else
$table_name = $table;
$base = dbase_create( $this->conv_dir . '/' . $table_name . '.DBF', $field_array);
if($base)
{
// таблица создана - перекидываем данные
$rows_query = mysql_query("SELECT * FROM " . $table);
while($row = mysql_fetch_array($rows_query, MYSQL_NUM))
{
$row = $this->convertdata($row);
if($row)
if( !dbase_add_record($base, $row) )
exit('Error add record');
}
dbase_close($base);
}
}
mysql_close($link);
}
}
?>
А теперь рассмотрим пример использования конвертатора.
$dir = './CONVERT_' . date('YmdHi'); // здесь будут DBF
$conv = new ConvdBase($dir);
$conv->convert('localhost', 'user', 'pass', 'base');
Если типы данных year, datetime, timestamp надо передавать в неизменном виде, приведите их к типу dBase "С", изменив функции getfield и convertdata.
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
- 2024-01-25 » Переменные Gitlab-Ci
- 2024-01-25 » Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами
- 2024-01-25 » Копирование файлов scp
- 2024-01-21 » Бездепозитные бонусы от казино: обзор условий и правил использования
- 2024-01-18 » Современная обработка ошибок в PHP
- 2024-01-18 » Пример шаблона проектирования MVC в PHP
- 2024-01-18 » Мифический человеко-DevOps
- 2023-12-28 » Google подвел итоги 2023 года в поиске
- 2023-12-28 » 5 ошибок отдела продаж, из-за которых вы теряете клиентов
- 2023-12-28 » Американский суд признал монополию Google на рынках дистрибуции Android-приложений
- 2023-12-28 » Хостинг-провайдер GoDaddy перестанет оказывать услуги пользователям из России
Кто мало хочет, тот дешево стоит |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.