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

Cкрипт полной конвертации форума в UTF8 с одновременным переносом на


Вопрос

Cкрипт полной конвертации форума в UTF8 с одновременным переносом на новый домен, подготовка к апгрейду до 3.0

 

Возможно кому-то понадобится... На выходе получаем сконвертированную в UTF8 IB2. Конвертится не только база, но и файлы. После этого можно смело апгрейдить до 3.0.

 

В начале скрипта находится конфигурационная секция.

 

#!/bin/bash -x

# --- CONFIG ---

DUMP_DIR="/var/www/vhosts/olddomain.ru/_db"

SRC_DIR="/var/www/vhosts/olddomain.ru/httpdocs"
SRC_DB_NAME="исх_БД_имя_базы"
SRC_DB_USER="исх_БД_пользователь"
SRC_DB_PASS="исх_БД_пароль"
SRC_DOMAIN="www.olddomain.ru"

DEST_DIR="/var/www/vhosts/newdomain.ru/httpdocs"
DEST_DB_NAME="нов_БД_имя_базы"
DEST_DB_USER="нов_БД_пользователь"
DEST_DB_PASS="нов_БД_пароль"
DEST_DOMAIN="www.newdomain.ru"

#Apache user and group
SITE_USER="нов_имя пользователя_сайта"
SITE_GROUP="нов_группа_сайта"


SCP="windows-1251" # codepage for 'iconv'
EXT=".*\.(htm[l]*|php[3]*|js|css|sql)$" #files extensions for coding
FCS="windows-1251" # charset for replace

DCP="UTF-8" # codepage for 'iconv'
TCS="UTF-8" # new charset

SRC_DIR_cp1251=$DEST_DIR"_cp1251/"

# --- END CONFIG ---

cd $DUMP_DIR


echo Backuping DB "SRC_DB_NAME"...
mysqldump -u$SRC_DB_USER -p$SRC_DB_PASS --default-character-set=utf8 --skip-add-drop-database --compact -e --skip-set-charset $SRC_DB_NAME >$SRC_DB_NAME.sql

echo Converting dump to UTF8...
cp --reply=yes $SRC_DB_NAME.sql $DEST_DB_NAME.sql
perl -pi -e 's/cp1251/utf8/g' $DEST_DB_NAME.sql
perl -pi -e 's/$SRC_DOMAIN/$DEST_DOMAIN/g' $DEST_DB_NAME.sql

echo Cleaning DB "$DEST_DB_NAME"...
mysql -u$DEST_DB_USER -p$DEST_DB_PASS --execute="DROP DATABASE $DEST_DB_NAME; CREATE DATABASE $DEST_DB_NAME CHARACTER SET utf8 COLLATE utf8_general_ci;"

echo Restoring dump to DB "$DEST_DB_NAME"...
mysql -u$DEST_DB_USER -p$DEST_DB_PASS --default-character-set=utf8 -f $DEST_DB_NAME < $DEST_DB_NAME.sql

echo Changing directory to "$DEST_DIR"...
cd $DEST_DIR
echo Cleaning destination folder...
rm -f -R $DEST_DIR/*

echo Copying source to destination...
cp -R -p $SRC_DIR/* $DEST_DIR/

echo Converting configs...
perl -pi -e 's/cp1251/utf8/g' conf_global.php
perl -pi -e 's/$SRC_DOMAIN/$DEST_DOMAIN/g' conf_global.php
perl -pi -e 's/$SRC_DB_NAME/$DEST_DB_NAME/g' conf_global.php
perl -pi -e 's/$SRC_DB_USER/$DEST_DB_USER/g' conf_global.php
perl -pi -e 's/$SRC_DB_PASS/$DEST_DB_PASS/g' conf_global.php

DEST_DIR=$DEST_DIR"/"

# Make new copy
echo Backuping Windows-1251 encoded files...
mkdir $SRC_DIR_cp1251
find $DEST_DIR -type d | sed "s#$DEST_DIR##" | xargs -i mkdir $SRC_DIR_cp1251{}
find $DEST_DIR -type f | grep -E "$EXT" | sed "s#$DEST_DIR##" | xargs -i cp -p $DEST_DIR{} $SRC_DIR_cp1251{}

# --- Converting files to UTF8...

echo Converting files to UTF8...

find $DEST_DIR -type f | grep -E "$EXT" | xargs -i echo {} | \
while read f
do
    iconv -c -f $SCP -t $DCP -o "$f.tmp""$f"
    mv -f "$f.tmp""$f"
    # Replace strings
    perl -pi -e "s#content\s*\=\s*[\"'].*?charset\s*=\s*$FCS.*?[\"']#content=\"text/html; charset=$TCS\"#g""$f"
done

echo Fixing permissions...
chown -R $SITE_USER:$SITE_GROUP $DEST_DIR/*
chown -R $SITE_USER:$SITE_GROUP $DEST_DIR/.ht*
chmod 777 install/installfiles cache cache/lang_cache cache/skin_cache uploads style_images conf_global.php cache/lang_cache/1 public/style_images public/style_css hooks

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

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

  • 0

Вот я одного не могу понять:

- что даст конверт базы в утф? Я поставил чистую 3-ку на утф-8 и всё таже беда с крякозяблами. Так смысл старый форум конвертить в утф? Объясните мне плз.

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

  • 0
Я поставил чистую 3-ку на утф-8 и всё таже беда с крякозяблами.

Значит неправильно поставил ты.

Смотри как у меня - все норм.

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

  • 0
Я поставил чистую 3-ку на утф-8 и всё таже беда с крякозяблами.

Значит неправильно поставил ты.

Смотри как у меня - все норм.

оо как ты 3.0 поставил, у меня неставится даже на самом последнем пхп

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

  • 0

А почему у тебя не ставится?

Хостинг sweb.ru

Абсолютно никаких проблем при установки не было. Обновил с RC2 до 3.0 final безболезненно.

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

  • 0

С установкой всё норм. Установилось, но соль в том что когда в админке миняешь ник на русские буквы - крякозяблы. Говорили что нада старый форум перегонять в утф-8. Перегнал, обновил до трёшки - результат тотже.

Решил потестить и установить чистую трёху на утф. Беда осталось....

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

  • 0

Локалка, денвер.

Добавлено через 48 минут:

Не, это цирк ))) Поставил тройку на свой хост в инете на обычную базу и всё работает нормально )) С админки ники редактируются что надо )) Даже на украинский язык ники меняются без проблем :D

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

  • 0
Локалка, денвер.

Так и думал

 

Не, это цирк ))) Поставил тройку на свой хост в инете на обычную базу и всё работает нормально ))

Денвер тоже надо настраивать. По умолчанию он весь из себя Виндовый. :D

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

  • 0
Денвер тоже надо настраивать. По умолчанию он весь из себя Виндовый. :)
Так вся соль в том что борду то я установил на виндовую базу )))) И всё работает, но проблема с кодировкой все же есть :D

Попробовал поставить мод, который разрешает добавлять коментарий при смене репутации. Пишешь русскими - крякозяблы ;)

А так, что касается стандартного форума - всё работает нормально на виндовой базе, правда это я установил чистый форум, а не обновлял с 2.3.6.

Как будет с обновлением - пока не известно ))

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

  • 0
А почему у тебя не ставится?

Хостинг sweb.ru

Абсолютно никаких проблем при установки не было. Обновил с RC2 до 3.0 final безболезненно.

я у себя на компе то с денвером не могу поставить о каком хостинге речь)

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

  • 0

Подтверждаю. Установщик финальной версии не работает на windows-хостах. Уточняю ошибку....

 

Fatal error: Class 'db_driver_' not found in C:\Zend\Apache2\ipb\admin\setup\sources\base\ipsRegistry_setup.php on line 1176

 

Такой баг есть в официальном баг-трекере: http://forums.invisionpower.com/tracker/is...ion-on-windows/

 

Если у вас такая же ошибка - отпишитесь на трекере.

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

  • 0

Есть пара вопросов о конфигу скрипта.

 

DUMP_DIR="/var/www/vhosts/olddomain.ru/_db"

Что есть это? Путь к директории с .sql-файлом дампа базы? Сделанный SypexDumper'ом дамп подойдет?

 

SRC_DOMAIN="www.olddomain.ru"

DEST_DOMAIN="www.newdomain.ru"

 

Домены должны записываться именно в таком виде? Для чего их прописывание вобще необходимо? Хостер один и тот же. Перенос в субдомен с апгрейдом. Точно не урл, не надо писать протокол (http://)?

 

#Apache user and group

SITE_USER="нов_имя пользователя_сайта"

SITE_GROUP="нов_группа_сайта"

 

А это что такое? А если я не уверен/не знаю? :D

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

  • 0

Приведенный в заголовке скрипт делает следующее:

 

mysqldump -u$SRC_DB_USER -p$SRC_DB_PASS --default-character-set=utf8 --skip-add-drop-database --compact -e --skip-set-charset $SRC_DB_NAME >$SRC_DB_NAME.sql

снимает полный дамп БД $SRC_DB_NAME и кладет его в файл $SRC_DB_NAME.sql в utf-8 кодировке

 

perl -pi -e 's/cp1251/utf8/g' $DEST_DB_NAME.sql

заменяет во всем дампе строку "cp1251" на строку "uft8" (гениально, угу... особенно если форум программистов)))

 

perl -pi -e 's/$SRC_DOMAIN/$DEST_DOMAIN/g' $DEST_DB_NAME.sql

заменяет во всем дампе строку "$SRC_DOMAIN" (по-дефолту "www.olddomain.ru") на строку $DEST_DOMAIN (по-дефолту "www.newdomain.ru")

 

mysql -u$DEST_DB_USER -p$DEST_DB_PASS --execute="DROP DATABASE $DEST_DB_NAME; CREATE DATABASE $DEST_DB_NAME CHARACTER SET utf8 COLLATE utf8_general_ci;"

создает новую БД $DEST_DB_NAME

 

mysql -u$DEST_DB_USER -p$DEST_DB_PASS --default-character-set=utf8 -f $DEST_DB_NAME < $DEST_DB_NAME.sql

импортирует в нее обработанный дамп

 

rm -f -R $DEST_DIR/*

удаляет все в $DEST_DIR

 

cp -R -p $SRC_DIR/* $DEST_DIR/

копирует все из $SRC_DIR в $DEST_DIR

 

perl -pi -e 's/cp1251/utf8/g' conf_global.php
perl -pi -e 's/$SRC_DOMAIN/$DEST_DOMAIN/g' conf_global.php
perl -pi -e 's/$SRC_DB_NAME/$DEST_DB_NAME/g' conf_global.php
perl -pi -e 's/$SRC_DB_USER/$DEST_DB_USER/g' conf_global.php
perl -pi -e 's/$SRC_DB_PASS/$DEST_DB_PASS/g' conf_global.php

конвертирует conf_global.php в uft8 и заменяет в нем $SRC_DOMAIN..$SRC_DB_PASS на $DEST_DOMAIN..$DEST_DB_PASS

 

mkdir $SRC_DIR_cp1251
find $DEST_DIR -type d | sed "s#$DEST_DIR##" | xargs -i mkdir $SRC_DIR_cp1251{}
find $DEST_DIR -type f | grep -E "$EXT" | sed "s#$DEST_DIR##" | xargs -i cp -p $DEST_DIR{} $SRC_DIR_cp1251{}

создает бекап всех скриптов в папке $SRC_DIR_cp1251

 

find $DEST_DIR -type f | grep -E "$EXT" | xargs -i echo {} | \
while read f
do
iconv -c -f $SCP -t $DCP -o "$f.tmp""$f"
mv -f "$f.tmp""$f"
# Replace strings
perl -pi -e "s#content\s*\=\s*[\"'].*?charset\s*=\s*$FCS.*?[\"']#content=\"text/html; charset=$TCS\"#g""$f"
done

конвертирует все файлы из cp_1251 в utf-8 и заменяет строку 'content="text/html; charset=windows-1251"' на юникодовскую

 

chown -R $SITE_USER:$SITE_GROUP $DEST_DIR/*
chown -R $SITE_USER:$SITE_GROUP $DEST_DIR/.ht*
chmod 777 install/installfiles cache cache/lang_cache cache/skin_cache uploads style_images conf_global.php cache/lang_cache/1 public/style_images public/style_css hooks

выполняет chmod нужных директорий, а также chown всей папки под пользователя $SITE_USER:$SITE_GROUP

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

  • 0
выполняет chmod нужных директорий, а также chown всей папки под пользователя $SITE_USER:$SITE_GROUP
chown всей папки под пользователя $SITE_USER:$SITE_GROUP
chown

Если вы не знаете, что такое chown, почитайте, для начала, вот это: [link]. Но вообще в наше время стыдно таких вещей не знать.

 

Если у вас стандартный apache на freebsd, то с уверенностью в 99% можно утверждать, что для вас Apache user & group равны "www".

 

Если есть сомнения на этот, счет, вам нужен файл конфигурации Apache - httpd.conf, в нем находите строки:

User %ИМЯ%
Group %ИМЯ%

Они вам и нужны.

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

  • 0

В наше время стыдно понтоваться :D

 

Имелось ввиду я не знаю в какой группе состоит пользователь.

 

Можно краткое описание того как использовать этот скрипт, если есть только доступ по SSH2?

В кратце, по командам.

Ибо правка скрипта и последующий запуск через sh upgrade приводит к:

: not found
: not found
: not found
: not found
: not found
: not found
: not found
: not found
: not found
: not found
: not found
cd: can't cd to /domains/domain_name.net/public_html/test/_db
: not found
: not found
Backuping DB SRC_DB_NAME...
mysqldump: not found
: not found
Converting dump to UTF8...
cp: illegal option -- -
usage: cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] source_file target_file
   cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] source_file ... target_directory
: No such file or directory.
: No such file or directory.
: not found
...aning DB admin_test
'@'localhost' (using password: YES)or user 'admin_boris
: not found
...toring dump to DB admin_test
: No such file or directorytest
: not found
...nging directory to /domains/domain_name.net/public_html/test/forums
cd: can't cd to /domains/domain_name.net/public_html/test/forums
Cleaning destination folder...
: not found
Copying source to destination...
/*: No such file or directorypublic_html/forums
: not found
Converting configs...
: No such file or directory.
: No such file or directory.
: No such file or directory.
: No such file or directory.
: No such file or directory.
: not found
: not found
Backuping Windows-1251 encoded files...
_cp1251: No such file or directoryblic_html/test/forums
: No such file or directorynet/public_html/test/forums
xargs: illegal option -- i
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
		 [-L number] [-n number [-x]] [-P maxprocs] [-s size]
		 [utility [argument ...]]
: No such file or directorynet/public_html/test/forums
xargs: illegal option -- i
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
		 [-L number] [-n number [-x]] [-P maxprocs] [-s size]
		 [utility [argument ...]]
: not found
: not found
Converting files to UTF8...
: not found
xargs: illegal option -- i
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
		 [-L number] [-n number [-x]] [-P maxprocs] [-s size]
		 [utility [argument ...]]
: not found
: No such file or directorynet/public_html/test/forums
upgrade: 91: Syntax error: end of file unexpected (expecting "do")

 

domain_name.net - имя домена.

 

При вход по SSH2 пользователь admin попадает в некорневую директорию. Нужно прописывать пути относительно нее?

 

 

Доступа к конфигурации апача нет.

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

  • 0

Нет ни малейшего желания отвечать. Вы вообще не понимаете, что делаете.

 

если есть только доступ по SSH2?
Доступа к конфигурации апача нет.

Это феерично....

 

В любом случае, следующий кто придет (если захочет вам помогать) спросит, под рутом ли вы, что за ОС на серве, что за хостинг такой чудесный, есть ли у вас вообще права выполнять что-то, что у вас такое твориться с путями и еще пару умных вопросов.

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

  • 0

:D Вы меня радуете.

 

Доступ к конфигу нашел из панели управления. Просто доступ по SSH был на уровень выше и подумалось что доступа нет, ага. Группу выяснил, это гуд

 

Ось фря 6.3, я не под рутом, хостинг и вправду чудесный - маджордомо, всё работает как часы.

 

Насчет путей вы ответить в состоянии?

 

А, ну да. Судя по тому что выдал sh update логично предположить что права запуска скриптов есть ;)

 

Попробую по-старинке сделать все ручками и выдернуть из скрипта часть с конвертацией базы.

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

  • 0

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

Но на форуме при переключении в утф8 всё равно вопросики, в вин1251 всё нормально.

Хостинг masterhost.ru

Как можно ещё проверить что база действитетьно в утф8 и как сделать чтобы форум норм показывал

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

  • 0
Вроде сконвертил ручками использую почти теже команды что в скрипте, в пхпмайадмине везде стало утф8 и отображается норм, база тоже утф8.

Но на форуме при переключении в утф8 всё равно вопросики, в вин1251 всё нормально.

Хостинг masterhost.ru

Как можно ещё проверить что база действитетьно в утф8 и как сделать чтобы форум норм показывал

+1 тоже самое

ЗЫ Конвертировал тоже ручками

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

Зарузка...
×
×
  • Создать...

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

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