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

Автор 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');
Так же и в остальных таблицах, где нужно