Замена у всех ссылок одного домена на другой во всех постах 
 
Обсуждалось в теме Изменение ссылок в ветках форума после переноса на другой хостинг 
 
Скрипт нужно залить в корень форума и вызвать в браузере. 
 
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. Собственно с помощью этого скрипта можно во всех постах форума поменять любую комбинацию символов на любую.(Отредактировано автором: 11 апреля 2012 — 08:38)  |