Скрипт массовой замены текста в файлах

12 Январь 2011 Автор: admin

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

Понадобилось мне вчера создать фейковый сайт программерской конторы. Под свои нужды, не спрашивайте зачем :)

Залез в яндекс.каталог, подобрал небольшой, не самый популярный сайтец одной конторы, занимающейся разработкой ПО 1С и по совместительству делающей сайты, ну и всякое тому подобное… Слил полностью сайт себе на жесткий диск с помощью WinHTTrack Website Copier - весьма удобная софтина, рекомендую. Получилось что-то около 40 файлов, из них было 30 хтмл-страничек. Полдела сделано.

Теперь надо было произвести некоторые действия с файлами, а именно – заменить название конторы на фейковое, ну и URL сайта везде поменять на свой. Однако в процессе выяснилось, что WinHTTrack оставляет в коде свои следы в виде комментария, где указывает откуда сохранена страница и в какой момент времени (с точностью до секунд), что вынуждает использовать регулярные выражения.

Итак, привожу код, все должно быть понятно, на пояснения не скупился :) Если все же останутся какие-то вопросы – отвечу в комментариях.

<?
// Инициализируемся
$removes = array(
	"xxx-soft-xxx.ru" => "cool-soft-plus.com",
	"XXX Soft" => "Cool Soft Plus"
);
$removes_regular = array(
	"~\n<!-- Mirrored from.*?<!-- /Added by HTTrack -->\n~is" => ""
);

// Запускаем
$array = GetFilesTree(getcwd()."/www.xxx-soft-xxx.ru");

// Функция поиска
function GetFilesTree($path, $mask = "*", $tree = array()) {
	$files = glob($path."/".$mask); // находим все файлы по маске
	foreach($files as $file) { // перебираем все файлы
		if (is_dir($file)) { // если директория - запускаем рекурсивно функцию поиска
			$tree[basename($file)] = GetFilesTree($file, $mask, $tree);
		} else if (is_file($file)) { // если файл - запускаем функцию замены
			$tree[] = $file;
			DoChange($file); // функция замены
		}
	}
	return $tree; // возвращаем в качестве ответа дерево каталогов/файлов
}

// Функция замены
function DoChange($file) {
	global $removes, $removes_regular;
	$data = file_get_contents($file); // получаем содержимое файла
	$data = strtr($data, $removes); // производим замену статичных значений
	foreach($removes_regular as $regexp => $remove) {
		$data = preg_replace($regexp, $remove, $data); // в цикле производим замену по всем регулярным выражениям
	}
	file_put_contents($file, $data); // сохраняем результаты замены обратно в файл
}
?>

В результате у меня получился симпатичный такой сайтик, который не стыдно использовать в своих корыстных и не очень целях :)
Приведенный код можно взять за основу какого-то более функционального скрипта, у меня же стояла задача по-быстрому накидать код для выполнения конкретной задачи. Пользуйтесь на здоровье :)

Комментарии: 2

  1. ebmw:

    Ну и как мне использовать этот скрипт? )

  2. admin:

    Как использовать – каждый решает сам. Я лишь делюсь своим опытом и наработками)

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.