Массовая замена текста в файлах

Рецепт №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); 
}
Рассказать друзьям:


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

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

*