Рецепт №82. Из книги «128 рецептов php»
Перейти к оглавлению
Этот рецепт может быть полезен, при работе с большим количеством текстовых файлов. Пример наглядно покажет, как можно перебрать все файлы, находящиеся в заданной папке, а также во всех вложенных папках. Так же рецепт хорошо демонстрирует работу рекурсивных функций.
Пример:
// пример использования $oldText = 'old text'; // что меняем $newText = 'new text'; // на что меняем $folderName = "./files"; // в какой папке меняем replace_txt($folderName, $oldText, $newText); /** * Функция замены текста во всех файлах папки * * @param string $folderName - пусть до папки * @param string $oldText - искомый текст * @param string $newText - на что меняем текст */ function replace_txt($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); // для работы с файлами в // кодировке windows-1251 //$contentFile = iconv("windows-1251", "utf-8", $contentFile); // делаем замену в тексте $contentFile = str_replace($oldText, $newText, $contentFile); // сохраняем изменения file_put_contents($folderName."/".$file,$contentFile); } // если папка, то рекурсивно // вызываем replace_txt if(is_dir($folderName."/".$file)){ replace_txt($folderName."/".$file, $oldText, $newText); } } } // закрываем папку closedir($dir); }