Alle Datein durchgehen und mit str_replace ersetzen

Joe

Erfahrenes Mitglied
Hallo Tutorials,

Ich möchte gerne alle Dateien im Unterordner backend in einer Schleife durchgehen und alle Wörter ersetzen(Rechtschreibun)?

PHP:
file_put_contents($file, str_replace($Wortalt, $Wortneu, file_get_contents($file)));

Die Frage ist eigentlich vielmehr wie baue ich die schleife und wie muss ich den Aufruf der Pfade gestalten. Die Dateien haben teils unterschiedliche Endungen zb tpl oder php.

Steh nur grad nen bissel auf dem Schlauch.

Gruß Joe
 
Jawoll genau das was ich grad gesucht habe nur weit besser als ichs versucht hätte zu machen.
Danke dir!
 
PHP:
Warning: file_get_contents(/Backend/templates/ptHolz.tpl) [function.file-get-contents]: failed to open stream: No such file or directory in /var/www/webxxxxx/html/Backend/templates/egal.tpl on line 318

PHP:
		foreach (new DirectoryIterator('../Backend/templates') as $fileInfo) {
			    if($fileInfo->isDot()) continue;
				//echo $fileInfo->getFilename() . "<br>\n";
				$file='/Backend/templates/'.$fileInfo->getFilename();
				//echo "<p>$file</p>";
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
				//echo $fileInfo->getFilename() . "<br>\n";
			}
		}

Verstehe die Fehlermeldung nicht so richtig. Oder was muss ich ändern?
PHP:
		foreach (new DirectoryIterator('../Backend/templates') as $fileInfo) {
			    if($fileInfo->isDot()) continue;
				echo $fileInfo->getFilename() . "<br>\n";

		}
gibt mir eine Reihe von Dateien aus etwa so:
dateix.tpl
dateiuser.tpl
usw.
 
Statt getFilename() muss man getRealPath() nehmen.

2 Fragen noch.
Kann man das in einer Forschleife packen?
Und bevor ich mich dusslig suche wie könnte man nach falsch geschriebenen FileNamen suchen?

PHP:
		foreach (new DirectoryIterator('../Backend/templates') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}
		foreach (new DirectoryIterator('../Backend/includes') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}
		foreach (new DirectoryIterator('../Backend') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}
		foreach (new DirectoryIterator('../Backend/css') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
		}

PS: Wenn jemand das gesamte Script sehen will das auch die gesamte Datenbank(MySQL) korrigiert würde ich mir die Mühe machen es zu posten und zu kommentieren.
 
2 Fragen noch.
Kann man das in einer Forschleife packen?
Und bevor ich mich dusslig suche wie könnte man nach falsch geschriebenen FileNamen suchen?

Die Frage war auch einfach nur dämlich man hat ja die Pfadnamen bereits. Ich habe nach dem Befehl rename() gesucht.
Tja die Frage wegen den Forschleifen war ob man es irgendwie in eine packen kann. Also anstatt 5mal fast die selbe Schleife zu scripten alles in eine Schleife zu packen.

PHP:
		foreach (new DirectoryIterator('../Backend/templates') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend/includes') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend/css') as $fileInfo) {
			if ($fileInfo->isDot()) continue;
			$file=$fileInfo->getRealPath();
			$proof=file_get_contents($file);
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
		foreach (new DirectoryIterator('../Backend/pages') as $fileInfo) {
			    if($fileInfo->isDot()) continue;
				//echo $fileInfo->getFilename() . "<br>\n";
				$file=$fileInfo->getRealPath();
				
				//echo "<p>$file</p>"; 
			$proof=file_get_contents($file);
			//die;
			$isnewfile=str_replace($Wortalt, $Wortneu, $proof);
			if ($proof!=$isnewfile) {
				file_put_contents($file, $isnewfile);
				echo "<p>$file</p>";
				//echo $fileInfo->getFilename() . "<br>\n";
			}
			$newName = str_replace($Wortalt, $Wortneu, $fileInfo->getPathname());
			if ($newName!=$fileInfo->getPathname()) {
				if ( rename ( $fileoldname=$fileInfo->getPathname(), $newName ) ) {
					echo "<p>$fileoldname wurde in $newName wurde umbenannt</p>";
				}
				else {
					echo "<p>Fehler: Datei $fileoldname konnte nicht umbenannt werden</p>";
				}
			}
		}
 
Aber wenn du alle Unterverzeichnisse von backend durchsuchen willst, schau dir meinen Link doch nochmal an ;)
der geht nämlich rekursiv alles durch.
 
  • Gefällt mir
Reaktionen: Joe
Zurück