Перейти к контенту
  • 0

Конвертер базы на PHP для русской IP.Board 3


Ritsuka

Вопрос

На данный момент в инструкции очень много сложного понаписано про экспорт базы, конвертирование через iconv и обратный импорт... Но почему бы не задействовать PHP и MySQL, они же прекрасно умеют конвертировать базы сами!

 

Вот примерный скрипт:

 <?php
// Database info

include("conf_global.php");

$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];

//---------------

header('Content-type: text/plain');

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );

$sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result = mysql_query($sql) or die( mysql_error() );
print "Database changed to UTF-8.\n";

$sql = 'SHOW TABLES';
$result = mysql_query($sql) or die( mysql_error() );

while ( $row = mysql_fetch_row($result) )
{
$table = mysql_real_escape_string($row[0]);
$sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($sql) or die( mysql_error() );
print "$table changed to UTF-8.\n";
}

mysql_close($dbconn);
?>

 

Что думают об этом специалисты ibresource?

 

Только что успешно сконвертировал этим скриптом свой немалый форум, заняло порядка 20 сек... Для крупных форумов конечно имеет смысл сделать потабличное конвертирование через ajax...

Изменено пользователем Ritsuka
  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 103
  • Создана
  • Последний ответ

Лучшие авторы в этом вопросе

Лучшие авторы в этом вопросе

Загружено фотографий

Рекомендуемые сообщения

  • 0

Вылезает ошибка при попытке запустить скрипт:

<br />
<b>Warning</b>:  mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in <b>/home/www/*/*/forum/conv.php</b> on line <b>15</b><br />
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Вылезает потому что вы данные для соединения с MySQL не верные указали. Или у вас MySQL не работает.

Да не может быть этого! Данные взяты из conf_global.php и многократно перепроверены! Даже хостеру писал, всё у них работает.

 

В чем может быть причина такой ошибки? Там вроде на 15-ой строчке ошибка показывается...

 

Разобрался! Нужно было вручную вписать названия БД и прочего на 15-ой и 16-ой строчках.

 

Странно как-то. То, что писалось вверху как-будто и не используется.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Вылезает потому что вы данные для соединения с MySQL не верные указали. Или у вас MySQL не работает.

Странно как-то. То, что писалось вверху как-будто и не используется.

Может у вас conf_global.php в другой папке лежит? :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

хм. сдампил базу. залил в отдельную базу. подсунул подправленный конф_глобал.

запустил скрипт.

отписал, что все гут.

 

начал потом обновлять - половина так, половина кракозябры.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Сделал конвертер таким образом.

Получается так, что в админке все нормально отображается, за исключением данных из полей, а также названия настроек, например в основных натсройках пустые, Но другие менюшки читаются.

На фоурме: служебные слова, типа, модератор, логин, пользователи, календарь, закрытый форум и т.п. все они читаются, а названия тем, тексты постов все в другой кодировке.

 

Если добавляю в .htaccess

 

AddDefaultCharset utf-8
AddCharset utf-8 *
<IfModule mod_charset.c>
CharsetSourceEnc utf-8
CharsetDefault utf-8
</IfModule>

, то все наоборот, в админке все в иероглифах, вообще все, а на форуме служебные слова не читаются, а темы и посты читаются нормально. Смотрю в базе, все тексты отображаются нормально, кодировка utf8_general_ci. Уже второй день мучаюсь.

  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Я таки добился правильной кодировки при переходе с 2.3.6 на 3.0.4:

 

1.1. если у вас форум на старой версии , то у вас в базе нет явного указания в какой кодировке заливать, т.е. если открыть базу в notepad ++ , то в ней нет строк вида ENGINE=MyISAM AUTO_INCREMENT=171 /*!40101 DEFAULT CHARSET=cp1251 */; , тогда вам нужно скопировать видоизмененный dumper.php в корень сайта из папки tools, поставляется вместе с ipb - в нем изменена строка на принудительную заливку в utf8 .

 

1.2. Если у вас форум на версии 2.x и выше, то вам нужно скачать Sypex Dumper Lite 1.0.8 с сайта производителя http://sypex.net/news/06/10/14/5 и кинуть в корень сайта

 

2. cделать дамп базы (если используете поставляемый с ipb dumper.php, то дамп будет лежать в папке cache, если с сайта производите, то в папке backup (можете изменить на любую, в строке 45)

 

3. скачать к себе на комп базу из папки cache или backup

 

4. открыть в notepad ++, выделить все и преобразовать в utf без BOD (вкладка Kодировки),

(если у вас в базе есть явное указание в какой кодировке заливать (см. выше), то нужно заменить в тексте все cp1251 на utf8), сохранить.

 

5. скопировать на сайт в папку cache или backup

 

6. Заменить в conf_global.php в корне сайта (без кавычек):

строчку "$INFO['mysql_codepage'] = 'cp1251';"

на

"$INFO['sql_charset'] = 'utf8';"

 

7. удалить все в базе через phpadmin

 

8. запустить dumper.php залить базу обратно на сайт (Обратите внимание и не наступайте на мои грабли - если у вас форум версии 2.х и выше и вы в 4 пункте подправили строки на utf8, то если будете заливать с помошью поставляемого вместе с ipb dumper-ом, то получите испорченную базу (почему не понял сам), поэтому используйте с сайта производителя).

 

9. Добавить текст в .htaccess (без ковычек), чтобы браузеры правильно понимали кодировку форума:

"AddDefaultCharset utf-8

AddCharset utf-8 *

<IfModule mod_charset.c>

CharsetSourceEnc utf-8

CharsetDefault utf-8

</IfModule>"

 

Все посты и темы на руском...

 

Обратите внимание, что если вы пропустите преобразование базы из 4 пункта (в utf без BOD), то половина форума (заголовки) получите в русской раскладке, другая в "крякозяблах"!

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Ritsuka я не изобретаю велосипед, просто никто не написал всю последовательность (от и до) и понять как все правильно переконвертить, нужно перелопатить десятки постов и несколько тем. Если упустить пункт перекодирования в notepad++ то получаем крякозяблы вместо постов. Жалко людей, которые бьются над этим вопросом...

 

А скрипт, который вы написали в начале (лично у меня) не помог. После переконвертации форум не запускается, пишет об ошибке работы с базой. В чем дело я не знаю... Может от того, что я поставил сборку... и предустановленные моды мешают... Шут его знает...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Я не свой скрипт выгораживаю - у меня всего лишь небольшая поделка, основанная на вычитанном в документации к MySQL. Многим она помогла. Жаль, что не помогла вам.

 

Я про статью в офицальной вики, где все давно изложено, причем в нескольких альтернативных вариантах: http://wiki.iblink.ru/ipb3/upgrade

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Ritsuka я не изобретаю велосипед, просто никто не написал всю последовательность (от и до) и понять как все правильно переконвертить, нужно перелопатить десятки постов и несколько тем. Если упустить пункт перекодирования в notepad++ то получаем крякозяблы вместо постов. Жалко людей, которые бьются над этим вопросом...

 

А скрипт, который вы написали в начале (лично у меня) не помог. После переконвертации форум не запускается, пишет об ошибке работы с базой. В чем дело я не знаю... Может от того, что я поставил сборку... и предустановленные моды мешают... Шут его знает...

Моды и кривая сборка тут нипричем. Скрипт от Ritsuka у меня отработал без явных ошибок, но в реале кодировка данных не изменилась, хотя сравнение поменялось. Пришлость дейстовоать по алгоритму, схожим с твоим - догадываюсь, что кое-что ты почерпнул из моих постов ранее в этой теме :D .

Ссылка на комментарий
Поделиться на других сайтах

  • 0
FarStar, это означает только одно - у вас обоих изначально была неверная конфиругация кодировки таблиц. Например, сценарий может быть такой: изначально у вас таблицы идут с collation = unicode_ci, а вот данные в них забиты в windows-1251 (такое возможно при определенной конфигурации сервера). В итоге, phpMyAdmin показывает вопросики, форум 2.х работает без особых проблем, скрипт из первого поста при запуске ничего не конвертирует, т.к. считает, что все уже в unicode, и тройка при установке, соответственно, выводит кракозябры.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

У меня все неправильно вышло :D

Вопросики показывает... Хоть и дампер врубил. Админка показывает нормально, а сам форум нет ;).

Раньше форум стоял на cp1251

А теперь UTF-8 Все посты, названия тем, форумов, одним словом, все кроме админки у меня в виде вопросиков.... Подмогните пожалуйста.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
На данный момент в инструкции очень много сложного понаписано про экспорт базы, конвертирование через iconv и обратный импорт... Но почему бы не задействовать PHP и MySQL, они же прекрасно умеют конвертировать базы сами!

 

Вот примерный скрипт:

 <?php
// Database info

include("conf_global.php");

$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];

//---------------

header('Content-type: text/plain');

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );

$sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result = mysql_query($sql) or die( mysql_error() );
print "Database changed to UTF-8.\n";

$sql = 'SHOW TABLES';
$result = mysql_query($sql) or die( mysql_error() );

while ( $row = mysql_fetch_row($result) )
{
$table = mysql_real_escape_string($row[0]);
$sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($sql) or die( mysql_error() );
print "$table changed to UTF-8.\n";
}

mysql_close($dbconn);
?>

 

Что думают об этом специалисты ibresource?

 

Только что успешно сконвертировал этим скриптом свой немалый форум, заняло порядка 20 сек... Для крупных форумов конечно имеет смысл сделать потабличное конвертирование через ajax...

 

спасибо дружище, если бы не ты, то не знаю что бы и делал

Ссылка на комментарий
Поделиться на других сайтах

  • 0

все данные для подключения к базе прописал правильно взял из конфига...при подключении пишет Access denied for user 'KypoJIecoB'@'212.168.196.7' (using password: NO) в чем проблема?

 

все конвертнул..спасибо за скрипт

Ссылка на комментарий
Поделиться на других сайтах

  • 0

На данный момент в инструкции очень много сложного понаписано про экспорт базы, конвертирование через iconv и обратный импорт... Но почему бы не задействовать PHP и MySQL, они же прекрасно умеют конвертировать базы сами!

 

Вот примерный скрипт:

 <?php
// Database info

include("conf_global.php");

$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];

//---------------

header('Content-type: text/plain');

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );

$sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result = mysql_query($sql) or die( mysql_error() );
print "Database changed to UTF-8.\n";

$sql = 'SHOW TABLES';
$result = mysql_query($sql) or die( mysql_error() );

while ( $row = mysql_fetch_row($result) )
{
$table = mysql_real_escape_string($row[0]);
$sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($sql) or die( mysql_error() );
print "$table changed to UTF-8.\n";
}

mysql_close($dbconn);
?>

 

Что думают об этом специалисты ibresource?

 

Только что успешно сконвертировал этим скриптом свой немалый форум, заняло порядка 20 сек... Для крупных форумов конечно имеет смысл сделать потабличное конвертирование через ajax...

 

Красавец, все сработало, только вот ошибка в конце установки

 

mySQL query error: INSERT INTO ibf_core_sys_module (`sys_module_title`,`sys_module_application`,`sys_module_key`,`sys_module_description`,`sys_module_version`,`sys_module_parent`,`sys_module_protected`,`sys_module_visible`,`sys_module_tables`,`sys_module_hooks`,`sys_module_position`,`sys_module_admin`) VALUES('Панель пользователя','core','usercp','Панель управления учетной записью пользователя','1.0.0',0,1,1,'','',2,0)

 

SQL error: Data too long for column 'sys_module_title' at row 1

SQL error code: 1406

Date: Thursday 09th September 2010 04:04:45 AM

 

 

Помогите исправить, пожалуйста!

Странно русскую ставлю, не получается, англ, легко...

Где взять руссификатор?

Изменено пользователем kpuk
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Конвертировал базу с latin1 в cp1251 с помощью Sypex Dumper. Затем скриптом Ritsuka в utf8.

Кодировка таблиц в базе изменилась на utf8_general_ci. Далее 3.13 установился без проблем.

Тексты сообщений и названия форумов в базе phpMyAdmin в кодировке браузера Юникод utf-8 читаются по русски.

Но в форуме, названия форумов и посты с вопросами.

Файл conf_global.php отредактирован, в админке форума utf-8 установлен.

Что посоветуете?

 

 

Гм. поэтапно сделал всё заново и заработало.

Спасибо Ritsuka, скрипт экономит кучу времени.

Вопрос снимаю.

Изменено пользователем s-and
  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Те же грабли что и у S-AND

Конвертировал базу с cp1251 скриптом Ritsuka в utf8 (спасибо за скрипт, работу облегчает реально)

Кодировка таблиц в базе изменилась на utf8_general_ci.

Проапгрейдился с 2.3.6 до 3.1.4.

Тексты сообщений и названия форумов в базе phpMyAdmin в кодировке браузера Юникод utf-8 читаются по русски.

Но если смотреть уже скриптом через url в браузере - названия форумов и посты в виде вопросов.

Попробовал второй раз пройти еще раз пошагово (уже без конвертации лички) - тот же результат %(

Помогите кто в теме!

 

Подскажи как вылечил?

  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Обновляем форум с IPB v2.3.6 до v3.1.4 столкнулись с проблемой "кракозябов" (не отображается русский яз)

Конвертнули в utf8, сравнение utf8_general_ci, таблицы читаемы. Обновление прошло успешно, в .htaccess ...utf8 писали.

в my.cnf менять utf8 везде не можем т.к. помимо ipb крутится движок на cp1251

 

есть интересная особенность: Захожу в профиль пользователя.. жму на Сообщения и вижу сообщения пользователя в нормальной кодировке.

 

Прошу помощи, совета, консультации.

  • Лайк 1
Ссылка на комментарий
Поделиться на других сайтах

  • 0

не уж то я такой баран, что не понимаю каких-то элементарных вещей в ипб?!

поиск по ключ словам "кодир" не помог....

Изменено пользователем mptron
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Всем огромное спасибо! Много информации почерпнул для себя! И перекодировал БД. Правда на локалке - но опишу что и как делал.

Версия рабочего скрипта 3.1.2 обновлял до версии 3.1.4

 

1. Создал бекап БД 3.1.2 Бекап выкачал на локалку. В конфиге стоит UTF-8 в админке тоже UTF-8

 

2. Залил новые файлы поверх старого скрипта ....admin/upgrade/ показало вот такое окно где просило сменить кодировку БД..

 

post-89303-0-66969400-1310058755_thumb.jpg

 

Разархивировал бекап открыл как текстовый документ с помошью BRED. Везде в таблицах прописана кодировка cp1251.

 

3. Поставил на локалке SypexDumperPro_208_for_nucoder Следовал инструкции указанной на сайте... Так как Zend пока не поддерживает версию пхп 5.3

 

4. Запустил создание бекапа http://домен/sxd/ - в настройках выбрал сохранить бекап в UTF-8.

 

5. После этот же бекап поставил назад с кодировкой UTF-8 и коррекцией кодировки.

 

6. Защел в пхпадмин все таблицы стали в кодировке UTF-8

 

7. Вернулся к пункту 2. форум начал обновляться.

 

8. Добавил в корень файл хитахес с параметрами

AddDefaultCharset utf-8

AddCharset utf-8 *

<IfModule mod_charset.c>

CharsetSourceEnc utf-8

CharsetDefault utf-8

</IfModule>

Все на русском и админка и сами темы форума!

 

Вечером попробую обновить на самом сервере - отпишу все ли получилось.

 

Еще раз всем спасибо за информацию которую пришлось прочитать от корки до корки!

 

P.S. Старался доступно написать процесс - может кому поможет обновиться. :x:

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.