В этой статье я покажу пример использования рекурсии. Для наглядности примера, переберем все файлы папки и подпапок. Перебирать файлы и подпапки будем рекурсивно. Чтобы было более наглядно, будем искать в файлах вхождение строки и менять ее на новую. Ниже приведен подробно прокомментированный код:
/** * Функция замены текста во всех файлах папки * * @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);