тем обновлений и переходов от одной кодировки к другой много, но позвольте и мне поделиться личным опытом... думаю кому-то статья будет полезной
1. cp1251 > utf8
нам не потребуется каких-то специальных приложений (в отличии от других тем), достаточно иметь под рукой mysqldump, входящего в пакет инсталляции любого сервера MySQL... приведенные ниже инструкции, подойдут для любой версии MySQL.
выполните скрипт:
mysqldump -u root -p --default-character-set=utf8 --result-file=forum.sql dbname
где dbname - имя БД вашего форума, если будет ругаться на неизвестную кодировку, то в командную строку дополнительно добавьте:
--character-sets-dir=/path/to/charset/example/usr/local/share/mysql/charsets
Замечу, что в какой бы кодировке не получился итоговый файл роли это никакой не играет, современные версии MySQL для хранения данных используют только одну кодировку - utf8, а sql дамп может быть в любой другой кодировке, ведь это только SQL инструкции.
Важно. В начале вашего SQL дампа должна быть строка SET NAMES utf8;
Указанная здесь кодировка (в моем примере utf8) должна совпадать с кодировкой последующих SQL инструкций.
Если такой строки вы не обнаружили, вам необходимо добавить её в начало SQL файла.
Как следует из вышеописанного, SQL инструкции могут быть в другой кодировке, например cp1251, в этом случае вам также нужно проверить, что в начале SQL файла имеется команда: SET NAMES cp1251;
Наша задача заключается в том, чтобы привести к кодировке utf8, нам потребуется следующий php скрипт, который изменит кодировку cp1251 на необходимую нам utf8;
PHP Code:
$fi = fopen('forum.sql', 'r');
$fo = fopen('forum_utf8.sql', 'w');
while ($str = fgets($fi)) {
$out = str_replace(' DEFAULT CHARSET=cp1251', ' DEFAULT CHARSET=utf8', $str);
$out = str_replace('CHARACTER SET cp1251 COLLATE cp1251_bin', 'CHARACTER SET utf8 COLLATE utf8_bin', $out);
fwrite($fo, $out);
}
fclose($fi);
fclose($fo);
после выполнения данного скрипта вы получите SQL дамп (forum_utf8.sql), инициализирующий базу в кодировке utf8
2. Обновление vB до версии 4.x
я обновлял до версии 4.2.1, в моем примере SQL инструкции для MySQL 5.6, но я уверен, что они подойдут для любых версий MySQL 5.х
2.1 Разворачиваем дамп
запускаем консольного mysql клиента:
mysql -u root -p
создаем новую базу данных, в моем примере это newforum:
create database newforum character set utf8;
переходим в созданную базу:
\u newforum
запускаем инструкции из нашего файла:
\. forum_utf8.sql
если у вас ещё нет пользователя БД (с правами которого php подключается к серверу), можно его тут же создать, в моем примере с именем forumuser и паролем UserPassw0rd:
grant all on newforum.* to 'forumuser'@'localhost' identified by 'UserPassw0rd';
2.2 Обновляем vB
2.2.1 Разворачиваем исходные файлы vB
2.2.2 заливаем поверх их обновления
2.2.3 заливаем локализацию (я думаю все пользуются локализацией), тут важно отметить, что локализация нужна уже в utf8
2.2.4 Важно! настраиваем includes/config.php, также, как было сказано в
смежной теме, необходимо раскоментировать строку:
$config['Mysqli']['charset'] = 'utf8';
при этом не важно, используете вы MySQL или MySQLi, в том и другом случае необходимо
2.2.5 настраиваем apache и php (тут подробнее, мой пример для php 5.4)
в файле httpd.conf или в файле виртуального хоста необходимо прописать:
php_admin_value error_reporting 22519
php_admin_flag display_error 0
где php_admin_value и php_admin_flag выставляют конфигурационные значения, которые нельзя изменить с файле .htaccess или с помощью функции ini_set;
значение 22519 эквивалентно E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
Помните! php_admin_value и php_admin_flag не можeт быть использовано в файлах .htaccess
в процессе установки у меня возникали ошибки, которые я устранил путем изменения файла includes/class_upgrade_product.php (см.вложение)
по сути исправления минимальны (строки 754, 759, 764, 960, 1003, 1065) - добавил дополнительные проверки, например в строке 754 добавил первую проверку: is_array(...) &&, остальные строки по аналогии:
PHP Code:
...
if (is_array($this->productobj['stylevardfns']) && is_array($this->productobj['stylevardfns']['stylevargroup']))
...
2.2.6 запускаем обновление vB...
2.3 Действия после обновления
2.3.1 устанавливаем локализацию
итак... мы обновились, при этом локализация "кривая" - в другой кодировке... на шаге 2.2.3 мы залили локализацию и она нам помогла только для удобочитаемого обновления vB, теперь необходимо обновить саму локализацию
дело в том, что хоть база у нас уже в utf8, а вот языковые настройки сообщают браузеру отображать в cp1251, потому и видим кракозябры, надеюсь все умеют в своем браузере менять кодировку отображаемой страницы?
как устанавливать локализацию подробно написано в ReadMe.txt к самой локализации в разделе:
--- III) Русификация интерфейса уже установленного vBulletin ---
PS спасибо zCarot
2.3.2 патчим vB под php 5.4
в php 5.4 изменили поведение функции
imagejpeg, потому вы не увидите половины картинок на своем форуме... опять лезем в исходный код, ищем все файлы с вызовом функции imagejpeg, НО правим только те, у которых в качестве второго параметра используется пустая строка, меняем:
imagejpeg($image, '', $quality);
на следующий код (вторым параметром указываем null):
imagejpeg($image, null, $quality);
я нашел два таких файла (исправленные файлы во вложении):
includes/class_image.php
forumrunner/image.php
форум прекрасно себя чувствует, в случае обнаружения ещё каких-либо подводных камней с php 5.4 буду телеграфировать здесь