Набросал небольшой скрипт, который импортирует города и регионы с сайта база-городов.рф
Оттуда нужны три файла: place_type_names.csv, places.csv, regions.csv.
Импортирует только города, тк если все импортировать, то потянет не каждый хостинг. Коменты в скрипте.
<?php
setlocale (LC_ALL, 'nl_NL');
$options = array(
'enable' => true, // Скрипт работает только если значение TRUE
/* Настройки подключения к БД */
'db_server' => 'localhost', // Сервер БД
'db_user' => 'user', // Имя пользователя
'db_password' => 'password', // Пароль
'db_base' => 'base', // Имя базы данных
'table_name' => 'xxxxx_djcf_regions' // Имя таблицы, укажите свой префикс
);
if(!$options['enable']) die('Скрипт отключен, дальнейшая обработка данных невозможна!');
function mysql_insert($table, $inserts) {
$values = array_map('mysql_real_escape_string', array_values($inserts));
$keys = array_keys($inserts);
return mysql_query('INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $values).'\')');
}
$link = mysql_connect($options['db_server'], $options['db_user'], $options['db_password']);
if (!$link) {
die('Ошибка соединения: ' . mysql_error());
}
// Указываем, что общаемся с БД только в UTF-8
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");
// Выбираем интересующую нас Базу
$db_selected = mysql_select_db($options['db_base'], $link);
if (!$db_selected) {
die ('Не удалось выбрать базу db_data: ' . mysql_error());
}
// Очищаем таблицу с регионами
mysql_query('TRUNCATE TABLE `'.$options['table_name'].'`');
// Импортируем типы мест (Город, Край, Округ и тд.)
$rows=array();
$fp = fopen ('place_type_names.csv',"r");
while ($data = fgetcsv($fp, 262144, ';', '"') ) $rows[]=$data;
fclose ($fp);
$name = array();
foreach($rows as $k=>$row){
if (!$k) continue; // Пропуск первой строки
$name[$row[0]]['name'] = $row[3];
$name[$row[0]]['after'] = $row[6];
}
// Добавляем Страну Россия
$data = array(
'id' => 1,
'name' => "Россия",
'parent_id' => 0,
'country' => 1,
'city' => 0,
'published' => 1,
'latitude' => '',
'longitude' => ''
);
mysql_insert($options['table_name'], $data);
// Импортируем регионы
$rows=array();
$fp = fopen ('regions.csv',"r");
while ($data = fgetcsv($fp, 262144, ';', '"') ) $rows[]=$data;
fclose ($fp);
foreach($rows as $k=>$row){
if (!$k) continue; // Пропуск первой строки
// Добавляем префикс или суффикс к названию региона из таблицы типов мест
$nameplace = $row[3]." ".$name[$row[6]]['name'];
if ($name[$row[6]]['after'] == 0) {
$nameplace = $name[$row[6]]['name']." ".$row[3];
}
$data = array(
'id' => $row[0],
'name' => $nameplace,
'parent_id' => 1,
'country' => 0,
'city' => 0,
'published' => 1,
'latitude' => '',
'longitude' => ''
);
mysql_insert($options['table_name'], $data);
}
// Импортируем места (города и тд.)
$fp = fopen ('places.csv',"r");
$k = 0;
while(!feof($fp)) {
$buf = fgets($fp);
$k++;
if ($k == 1) continue; // Пропуск первой строки
$row = explode(";", $buf);
if ($row[5] == '3') { // Импортируем только города (3 - города), можно убрать условие, тогда импортируется все, но не всякий хостинг выдержит )))
// Добавляем префикс или суффикс к названию места из таблицы типов мест
$nameplace = $row[3]." ".$name[$row[6]]['name'];
if ($name[$row[6]]['after'] == 0) {
$nameplace = $name[$row[6]]['name']." ".$row[3];
}
$data = array(
'id' => $row[0],
'name' => $nameplace,
'parent_id' => $row[8],
'country' => 0,
'city' => 1,
'published' => 1,
'latitude' => '',
'longitude' => ''
);
mysql_insert($options['table_name'], $data);
}
}
fclose ($fp);
mysql_close($link);
echo "FINISH";
?>