Скрипт массовой замены текста в файлах
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); // сохраняем результаты замены обратно в файл
}
?>
В результате у меня получился симпатичный такой сайтик, который не стыдно использовать в своих корыстных и не очень целях ![]()
Приведенный код можно взять за основу какого-то более функционального скрипта, у меня же стояла задача по-быстрому накидать код для выполнения конкретной задачи. Пользуйтесь на здоровье
3 Июль 2011, в 17:32
Ну и как мне использовать этот скрипт? )
3 Июль 2011, в 17:54
Как использовать – каждый решает сам. Я лишь делюсь своим опытом и наработками)