Замена текста во всех файлах папки и подпапок. Пример рекурсии

Замена текста во всех файлах папки и подпапок. Пример рекурсииВ этой статье я покажу пример использования рекурсии. Для наглядности примера, переберем все файлы папки и подпапок. Перебирать файлы и подпапки будем рекурсивно. Чтобы было более наглядно, будем искать в файлах вхождение строки и менять ее на новую. Ниже приведен подробно прокомментированный код:

/**
* Функция замены текста во всех файлах папки
* 
* @param string $folderName - пусть до папки
* @param string $oldText - искомый текст
* @param string $newText - на что меняем текст
*/
function replace_text_files($folderName, $oldText, $newText){
    // открываем текущую папку 
    $dir = opendir($folderName); 
    // перебираем папку 
    while (($file = readdir($dir)) !== false){ // перебираем пока есть файлы
        if($file != "." && $file != ".."){ // если это не папка
            if(is_file($folderName."/".$file)){ // если файл
                $contentFile = file_get_contents($folderName."/".$file); // открываем файл
                //$contentFile = iconv("windows-1251", "utf-8", $contentFile); // для работы с файлами в кодировке windows-1251
                $contentFile = str_replace($oldText, $newText, $contentFile); // делаем замену в тексте
                file_put_contents($folderName."/".$file,$contentFile); // сохраняем изменения
            } 
            // если папка, то рекурсивно вызываем replace_text_files
            if(is_dir($folderName."/".$file)) replace_text_files($folderName."/".$file, $oldText, $newText);
        } 
    } 
    // закрываем папку
    closedir($dir); 
}

Пример вызова функции

// пример использования
$oldText = 'old text'; // что меняем
$newText = 'new text'; // на что меняем
$folderName = "./files"; // в какой папке ищем
replace_text_files($folderName, $oldText, $newText);
Рассказать друзьям:


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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*