- Массовая замена текста в файлах
- Добавить комментарий Отменить ответ
- Контакты
- Рубрики
- Свежие записи
- Популярные записи
- Архивы
- Замена текста во всех файлах папки и подпапок. Пример рекурсии
- Массовая замена текста в файлах с помощью 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); >
Добавить комментарий Отменить ответ
Контакты
Рубрики
- API соц.сетей (14)
- Arduino (26)
- HTML и CSS (29)
- Java Script (56)
- JQuery (32)
- PHP (144)
- SQL (15)
- Готовые проекты (7)
- Книга «128 рецептов php» (128)
- Настройки (3)
- Оффтоп (2)
Свежие записи
Популярные записи
Архивы
- Апрель 2021 (1)
- Март 2021 (1)
- Февраль 2021 (1)
- Июнь 2020 (1)
- Май 2018 (1)
- Апрель 2018 (4)
- Март 2018 (6)
- Февраль 2018 (5)
- Январь 2018 (2)
- Декабрь 2017 (6)
- Ноябрь 2017 (5)
- Март 2017 (1)
- Декабрь 2016 (2)
- Ноябрь 2016 (5)
- Октябрь 2016 (5)
- Май 2016 (1)
- Декабрь 2014 (1)
- Ноябрь 2014 (63)
- Октябрь 2014 (70)
- Сентябрь 2014 (28)
- Август 2014 (13)
- Апрель 2014 (5)
- Март 2014 (10)
- Февраль 2014 (6)
- Январь 2014 (46)
- Декабрь 2013 (1)
- Ноябрь 2013 (1)
- Октябрь 2013 (6)
- Сентябрь 2013 (17)
- Июль 2013 (9)
- Июнь 2013 (4)
- Март 2013 (2)
- Февраль 2013 (24)
Замена текста во всех файлах папки и подпапок. Пример рекурсии
В этой статье я покажу пример использования рекурсии. Для наглядности примера, переберем все файлы папки и подпапок. Перебирать файлы и подпапки будем рекурсивно. Чтобы было более наглядно, будем искать в файлах вхождение строки и менять ее на новую. Ниже приведен подробно прокомментированный код:
/** * Функция замены текста во всех файлах папки * * @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);
Массовая замена текста в файлах с помощью 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( false !== ($file = readdir($dir)) )< // если это не папка if( $file != '.' && $file != '..' )< $file_path = "$folderName/$file"; // это файл if( is_file($file_path) )< $file_content = file_get_contents( $file_path ); // получаем конетнт файла // для работы с файлами в кодировке windows-1251 //$file_content = iconv( "windows-1251", "utf-8", $file_content ); // делаем замену в тексте $file_content = str_replace( $oldText, $newText, $file_content ); // сохраняем изменения file_put_contents( $file_path, $file_content ); >// это папка, рекурсивно вызываем replace_txt() elseif( is_dir($file_path) ) < replace_txt( $file_path, $oldText, $newText ); >> > closedir( $dir ); // закрываем папку >
Замена строки во всех файлах директории с неограниченным числом вложенных поддиректорий
Функция предназначена для рекурсивного спуска по всем вложенным поддиректориям корневой директории и замене заданной подстроки во всех встреченых файлах.
Код рекурсивной фукнции scan_dir(), которая обходит директории
////////////////////////////////////////////////////////// // Рекурсивная функция - спускаемся вниз по каталогу ////////////////////////////////////////////////////////// function scan_dir($dirname) // Объявляем переменные замены глобальными GLOBAL $text, $retext; // Открываем текущую директорию $dir = opendir($dirname); // Читаем в цикле директорию while (($file = readdir($dir)) !== false) // Если файл обрабатываем его содержимое if($file != "." && $file != "..") // Если имеем дело с файлом - производим в нём замену if(is_file($dirname."/".$file)) // Читаем содержимое файла $content = file_get_contents($dirname."/".$file); // Осуществляем замену $content = str_replace($text, $retext, $content); // Перезаписываем файл file_put_contents($dirname."/".$file,$content); > // Если перед нами директория, вызываем рекурсивно // функцию scan_dir if(is_dir($dirname."/".$file)) < echo $dirname."/".$file."
"; scan_dir($dirname."/".$file); > > > // Закрываем директорию closedir($dir); > ?>Воспользоваться результатами можно при помощи следующего кода
Код вызова функции scan_dir()
= '$text'; // Искомая строка $retext = '$retext'; // Строка замены $dirname = "Имя корневой директории, например ."; scan_dir($dirname); // Вызов рекурсивной функции ?>