Массовая замена текста в файлах с помощью 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 ); // закрываем папку
}

Эта заметка встроена в: Полезные PHP коды — для опытных