Перенос форума на другое доменное имя. Скрипт парсера постов

Автор RBW, 06 декабря 2007, 14:57:17

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

RBW

Назрела необходимость сменить доменное имя. В админке и в шаблонах поравить особого труда не составляет. Но юзерами напощено около 2 тысяч постов, содержащих ссылки (url) на уже старое доменное имя и эти ссылки надо изменить. Иначе поотваливаются их картинки, аттачменты, перекрестные ссылки и т.п.
Наиболее логичное решение - пройтись парсером по таблице SMF_messages и переправить все совпадения.
По моей просьбе написали скрипт парсера (сам я не программист на PHP :(), посмотрите пожалуйста, не содержит ли он ошибок. И какие еще подводные камни могут встретиться и как их предусмотреть..
Для примера в скрипте даны ссылки на форум и фтп (все это находится в кампусной локальной сети и пока не имеет входа снаружи. Версия SMF - 1.0.3)


<?php$ip = '127.0.0.1'; // Адрес БД$login = ''; //Login$pass = ''; //Pass$db = 'smf'; // Database Name$prefix = 'smf_'; //Database prefix$SQL001 = mysql_connect($ip, $login, $pass);$SQL002 = mysql_select_db($db, $SQL001);$SQL003 = mysql_query("SELECT `ID_MSG`, `body` FROM `{$prefix}messages` WHERE `body` LIKE '%site.ru%'");$i=0;while($SQL004=mysql_fetch_array($SQL003)){ $text = $SQL004['body']; $text = preg_replace("#http://(.+?)\.site\.ru#is","http://\\1\.sitenet.ru",$text); $text = preg_replace("#ftp://(.+?)\.site\.ru#is","ftp://\\1\.sitenet.ru",$text); $SQL000=mysql_query("UPDATE `{$prefix}messages` SET `body` = '{$text}' WHERE `ID_MSG` = {$SQL004['ID_MSG']}";}/* $text = preg_replace("#\.site\.ru#is","\.sitenet.ru",$text);если изменить на это (оба шаблона стереть и этот вбухать) то измениться ВАЩЕ ВЕЗДЕ */ echo "Operation complete ;)?>


Думаю, что если этот скрипт подработать и сделать более универсальным, он может пригодиться многим в аналогичной ситуации (например смена IP-адресации на доменную).

RBW

Хех.. все можно сделать проще.. ну или почти все..
На руборде уважаемый Cheery подсказал просто сделать SQL-запрос в PHPMyAdmin (в примере меняем IP-адрес на доменное имя):
update smf_messages set body =  replace(body,'192.168.2.126','homer.site.ru');
Так же и в остальных таблицах, где нужно