ExBB Community » » Утилиты и конвертеры » Замена у всех ссылок одного домена на другой во всех постах

Страниц (2): [1] 2 »
 

1. 1Bot - 11 апреля 2012 — 08:33 - перейти к сообщению
Замена у всех ссылок одного домена на другой во всех постах

Обсуждалось в теме Изменение ссылок в ветках форума после переноса на другой хостинг

Скрипт нужно залить в корень форума и вызвать в браузере.

change_url.php
CODE:
<?php
#change_url.php
/****************************************************************************
Замена у всех ссылок одного домена на другой в постах форума ExBB FM 1.0 RC1.
Изменение ссылок в ветках форума после переноса на другой хостинг.

(c) 1Bot aka Strobe, 2012
****************************************************************************/

set_time_limit(0); // не ограничиваем время работы скрипта (важно для больших форумов!)

// основные параметры скрипта
$old_forum_addr = 'http://www.local.my'; // старый адрес сайта форума
$new_forum_addr = 'http://forum.local.my'; // новый адрес сайта форума

// будем искать и сравнивать по большим буквам, а заменять на малые
$old_forum_addr = strtoupper($old_forum_addr);
$new_forum_addr = strtolower($new_forum_addr);

$replace_count = 0; // количество замен

function replace_url($post)
{
global $replace_count, $old_forum_addr, $new_forum_addr;
// return str_replace($old_forum_addr, $new_forum_addr, $post);
// такой подход не учитывает регистр, в котором может быть прописан адрес,
// поэтому будем искать и сравнивать по большим буквам, а заменять на малые
$pos = strpos(strtoupper($post), $old_forum_addr);
if ($pos === false) return $post;
else
{
$replace_count++;
return substr($post, 0, $pos) . $new_forum_addr
. replace_url(substr($post, $pos + strlen($old_forum_addr)));
}
}

echo <<<DATA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=win1251">
<meta http-equiv="Content-Language" content="ru">
<title>Замена у всех ссылок одного домена на другой в постах форума ExBB FM 1.0 RC1</title>
</head>
<body>
<p>Изменение ссылок в ветках форума после переноса на другой хостинг.</p>
<p>Cтарый адрес сайта форума: {$old_forum_addr}</p>
<p>Новый адрес сайта форума: {$new_forum_addr}</p>
<hr />
<pre>
DATA;

if ($df = @opendir('.'))
{ // пройти по всем форумам
while ($f = readdir($df))
{
if ('.' == $f || '..' == $f || !is_dir($f) || 'FORUM' !== strtoupper(substr($f,0,5))) continue;
// $f - папка форума /forumN (N - номер форума)
echo $f . "\n";
if ($dt = @opendir($f))
{ // пройти по всем темам
while ($t = readdir($dt))
{
if ('THD.PHP' !== strtoupper(substr($t,-7,7))) continue;
// $t - файл темы /forumN/id-thd.php (N - номер форума, id - номер темы)
$t = "./$f/$t";
echo ' ' . $t;

// считываем файл с сообщениями темы
// Читает файл для возможной записи в него не закрывая файла
$fp = @fopen($t, 'a+') or die("Could not read from the file <strong>$t</strong>");
flock($fp, 2);
$filesize = filesize($t);
$filesize = (0 === $filesize) ? 1 : $filesize-8;
fseek($fp, 8);
$th = fread($fp, $filesize);
$th = unserialize($th);

// пройти по всем сообщениям
$replace_count = 0;
foreach ($th as $id => $post_arr)
{ // замена url для сообщения
$th[$id]['post'] = replace_url($post_arr['post']);
}

// сохранение файла с сообщениями темы если были замены
if ($replace_count)
{
echo ' (произведено замен: ' . $replace_count . ')';
fseek ($fp, 0);
ftruncate ($fp, 0);
fwrite($fp, '<?die;?>' . serialize($th));
fflush($fp);
}
flock($fp, 3);
fclose($fp);

unset($th, $fp);
echo "\n";
}
closedir($dt);
}
}
closedir($df);
}

echo <<<DATA
</pre>
</body>
</html>
DATA;
?>


нужно задать перед запуском
CODE:
// основные параметры скрипта
$old_forum_addr = 'http://www.local.my'; // старый адрес сайта форума
$new_forum_addr = 'http://forum.local.my'; // новый адрес сайта форума


P.S. Собственно с помощью этого скрипта можно во всех постах форума поменять любую комбинацию символов на любую.
2. Леший - 11 апреля 2012 — 10:11 - перейти к сообщению
А никто более простой способ не пробовал?- применить модуль цензуры на форуме?
3. 1Bot - 11 апреля 2012 — 11:00 - перейти к сообщению
Леший пишет:
А никто более простой способ не пробовал?- применить модуль цензуры на форуме?

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

Модуль цензуры в этом случае никак помочь не может.
4. Леший - 11 апреля 2012 — 13:50 - перейти к сообщению
Блин,где вы раньше были с этим скриптом,когда я 500 html страниц вручную перетряхивал, выдергивая копирайты и скрипты рекламы бесплатного хостинга......
5. 1Bot - 23 июля 2012 — 19:19 - перейти к сообщению
Рекомендую для этого форума использовать данный скрипт для смены ссылок старого домена на новый.
6. electron - 23 июля 2012 — 19:57 - перейти к сообщению
Улыбка они уже давно заменены
7. BON - 24 июля 2012 — 04:54 - перейти к сообщению
electron пишет:
они уже давно заменены

причем сразу, как только был поставлен форум Улыбка
8. Zeg - 24 июля 2012 — 08:25 - перейти к сообщению
Поиск от Гугла (и возможно Яндекса) поправьте, он ищет по старому домену.
9. electron - 24 июля 2012 — 08:45 - перейти к сообщению
Zeg пишет:
Поиск от Гугла (и возможно Яндекса) поправьте, он ищет по старому домену.

действительно, проглядели Улыбка исправлено. спасибо
10. roma1 - 18 октября 2013 — 16:21 - перейти к сообщению
вот что выдало при вызове скрипта
CODE:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/roma/data/www/my-bastion.pp.ua/change_url.php on line 84


правда я прописал адреса на скрине видно где стрелкой позначено, вместо текста старый и новый адрес. может нужно было как то иначе?
11. Yamaliya - 18 октября 2013 — 16:37 - перейти к сообщению
roma1 пишет:
может нужно было как то иначе?

Надеюсь вы писали не после двух слешей, а до них, в одинарных кавычках. Двойной слеш в данном случае - это просто комментарий.
12. electron - 18 октября 2013 — 16:40 - перейти к сообщению
вместо http://www.local.my надо было писать старый адрес, а вместо http://forum.local.my - новый адрес форума
13. roma1 - 18 октября 2013 — 17:01 - перейти к сообщению
понял, ступил. спасибо.
(Добавление)
сделал так
CODE:
// основные параметры скрипта
$old_forum_addr = 'http://arxevarius.com.ua'; // старый адрес сайта форума
$new_forum_addr = 'http://my-bastion.pp.ua'; // новый адрес сайта форума


та же ошибка блин Огорчение
14. 1Bot - 21 октября 2013 — 13:45 - перейти к сообщению
roma1
Прикрепите исправленный Вами файл change_url.php
15. roma1 - 21 октября 2013 — 14:08 - перейти к сообщению
понял. Улыбка

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0447]     [ ]