Автоматическое однотипное редактирование множества файлов

Если вдруг случилось так, что есть большое количество файлов, в которых совершена однотипная ошибка, либо есть текст, который нужно заменить на другой, можно воспользоваться приведенным ниже кодом.
Главное — указать директорию в поле $dirname и искомую фразу в поле $text, которая в последствии будет заменена на строку замены $retext. Скрипт будет перебирать все файлы, которые лежат в данной папке и рекурсивно будет проходить все подпапки, выполняя те же самые действия. Если подпапки просматривать нет необходимости, то нужно закомментировать строчку if (is_dir($file_p)) scan_dir($file_p);

<?php
set_time_limit(0); // если файликов много и нужно проверить все, то нужно включить, иначе сработает ограничение по времени
function scan_dir($dirname) // Рекурсивная функция
{
    global $text, $retext;
    $dir = opendir($dirname); // Открываем текущую директорию
    while (($file = readdir($dir)) !== false) { // Читаем в цикле директорию
        if ($file != "." && $file != "..") { // Если файл, то обрабатываем его содержимое
            $file_p = $dirname . "/" . $file; // сохраняем название файла
            if (is_file($file_p)) { // Если имеем дело с файлом, то производим в нём замену
                $content = file_get_contents($file_p); // Читаем содержимое файла
                $content = str_replace($text, $retext, $content); // Осуществляем замену
                file_put_contents($file_p, $content); // Перезаписываем файл
            }
            // Если перед нами директория, вызываем рекурсивно функцию scan_dir
            if (is_dir($file_p)) scan_dir($file_p);
        }
    }
    closedir($dir); // Закрываем директорию
}
$text = 'aaaaaaaaaaaaaa'; // Искомая строка
$retext = 'bbbbbbbbbbbbbb'; // Строка замены
$dirname = 'c:/txt/';
scan_dir($dirname); // Вызов рекурсивной функции
echo 'Черное дело сделано!, мой господин!!!';

?>

JohnnySuperb

Человек с разными склонностями и потребностями..

Добавить комментарий