Как я переезжал с DLE на LiveStreet (часть первая, вводная)
Добрый день. Я хочу поведать историю, как я переезжал с движка DLE на LiveStreet.
DLE я был недоволен давно — функционал слабый, нагрузку держит плохо, с плагинами и обновлением вообще беда.
Одним прекрасным днем я увидел топик, который натолкнул меня на мысль а почему бы и нет.
Этот конвертер я попытался попробовать на локальной копии сайта (бд в кодировке windows-1251 занимала 1,3 Гб), конвертор просто не работал. Он не был рассчитан на такой объем данных. И после этого я сел все переносить ручками )
Перво наперво я сел за написание скриптов по переносу основных данных:
Для начала я составил рыбу типового скрипта для переноса. Мне надо было чтобы он умел подсоединяться к двум базам, замерять время работы, конвертировать кодировку.
Итак, рыба:
Код писался быстро и для единоразового использования, поэтому это тот самый спагетти код )
В следующих постах я более подробно расскажу про каждый скрипт переноса — какие трудности и что учесть. Про сохранение аватаров и урл старых записей тоже будет ) Сам переезд сайта состоится на днях, по итогам я тоже напишу статью.
DLE я был недоволен давно — функционал слабый, нагрузку держит плохо, с плагинами и обновлением вообще беда.
Одним прекрасным днем я увидел топик, который натолкнул меня на мысль а почему бы и нет.
Этот конвертер я попытался попробовать на локальной копии сайта (бд в кодировке windows-1251 занимала 1,3 Гб), конвертор просто не работал. Он не был рассчитан на такой объем данных. И после этого я сел все переносить ручками )
Перво наперво я сел за написание скриптов по переносу основных данных:
- Пользователи
- Блоги
- Модераторы и администраторы в блогах
- Личные сообщения
- Посты
- Комментарии
- Подписки к комментариям
Для начала я составил рыбу типового скрипта для переноса. Мне надо было чтобы он умел подсоединяться к двум базам, замерять время работы, конвертировать кодировку.
Итак, рыба:
<?
ignore_user_abort(true);
set_time_limit(0);
$mtime = microtime(); //Считываем текущее время
$mtime = explode(" ",$mtime); //Разделяем секунды и миллисекунды
// Составляем одно число из секунд и миллисекунд
// и записываем стартовое время в переменную
$tstart = $mtime[1] + $mtime[0];
$dle_host = "localhost";
$dle_user = "user1";
$dle_pass = "pass1";
$dle_db = "db1";
$dle_prefix = "dle_";
$dle_id = mysql_connect($dle_host,$dle_user,$dle_pass,true) ;
mysql_select_db($dle_db, $dle_id);
mysql_set_charset('cp1251',$dle_id);
$ls_host = "localhost2";
$ls_user = "user2";
$ls_pass = "pass2";
$ls_db = "db2";
$ls_prefix = "ls_";
$ls_id = mysql_connect($ls_host,$ls_user,$ls_pass,true) ;
mysql_select_db($ls_db, $ls_id);
mysql_set_charset('utf8',$ls_id);
/*
Тут будет обработка данных. Счетчик - переменная $i
*/
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$totaltime = ($mtime - $tstart);//Вычисляем разницу
// Выводим не экран
printf ("Страница сгенерирована за %f секунд !", $totaltime);
print ('Обработано '.$i.' записей');
//Функция перегоняет массив в утф-8 и снимает слеши
function ArrayIconv(&$array){
if(is_array($array))
foreach($array as &$k)
ArrayIconv($k);
else
$array = stripslashes(iconv('windows-1251','utf-8//IGNORE',$array));
return $array;
}
Код писался быстро и для единоразового использования, поэтому это тот самый спагетти код )
В следующих постах я более подробно расскажу про каждый скрипт переноса — какие трудности и что учесть. Про сохранение аватаров и урл старых записей тоже будет ) Сам переезд сайта состоится на днях, по итогам я тоже напишу статью.
4 комментария
Для пользователей специально написал сообщение что это нормально.