Перейти к контенту
  • 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 тоже самое

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

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

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

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

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

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

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

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

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

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

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

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

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