Rekursives Suchen und Ersetzen von Text mit PHP

Eine recht häufige Aufgabe, eine Lösung hatte aber trotzdem nicht in der Schublade liegen, und Google brachte auf Anhieb auch keine brauchbaren Treffer.

Deshalb hier nochmal, quasi als Merkzettel für mich, eine PHP-Funktion, die rekursiv einen Ordner durchwandert und in allen Dateien Text sucht und ersetzt.

// This function searches and replaces text in textfiles in a given directory recursively
function searchReplace($dirName, $search, $replace, $fileExtensions = NULL) {
	if (!is_dir($dirName)) {
		return;
	}
	$dh = opendir($dirName);
	while (($filename = readdir($dh)) !== false) {
		if ($filename != '.' && $filename != '..') {
			if (is_dir($dirName.$filename)) {
				searchReplace($dirName.$filename.'/', $search, $replace, $fileExtensions);
			}
			else {
				$fileExtension = substr($filename, strrpos($filename, '.'));
				if (!is_null($fileExtensions) && !in_array($fileExtension, $fileExtensions)) {
					continue;
				}
				$buffer = '';
				$fh = fopen($dirName.$filename, 'r');
				while (!feof($fh)) {
					$buffer .= fgets($fh);
				}
				fclose($fh);
				// for more sophisticated search & replace you might prefer regular expressions and preg_replace
				$buffer = str_replace($search, $replace, $buffer);
				$fh = fopen($dirName.$filename, 'w');
				fwrite($fh, $buffer);
				fclose($fh);
			}
		}
	}
	closedir($dh);
}
// usage:
$dirName = '/path/to/my/directory/';
$search = 'foo';
$replace = 'bar';
// arrays can also be used for replacing several strings at a time:
// $search = array('foo1', 'foo2');
// $replace = array('bar1', 'bar2');
$fileExtensions = array('.php', '.html', '.htm'); // set to NULL for search and replace in any file
searchReplace($dirName, $search, $replace, $fileExtensions);

Die Kommentare sind geschlossen.


Archiv
Kategorien
Suche