|
Haben Sie sich eigentlich auch schon geärgert, weil eine Web-Seite "kryptisch" dargestellt wurde - wie: "Alles ist m?glich"?
Sollten Sie öfters die systemconsulting besuchen, dann kennen Sie das folgende Formular wahrscheinlich bereits (zumindest in Teilen). In diesem Tutorial wird allerdings keine "XML-Sitemap" erzeugt. Hier werden Dateien überarbeitet - und zwar alle, welche Sie anweisen. Ein gewaltiges Formular also. Im Beispiel werden "nur" Entities durch Ersetzung zugewiesen. Wir überlassen es Ihrer Phantasie, was man noch damit "anstellen" kann. Aber bitte Vorsicht!!! Dateien zuerst sichern >>> eine Kopie zum Test anlegen >>> zuerst testen >>> Ergebnisse prüfen und erst danach übertragen. Entities schreibenAlso der Hauptteil der Script-Seite wird hier nicht wieder diskutiert (Sie können Genaues zum Scriptblock dem Tutorial "sitemap - rekursive Funktionen" entnehmen. An diesem Scriptblock wurde nichts geändert, bis auf die Tatsache, dass wir hier die Variable $host nicht benötigen. Um so wichtiger ist die Behandlung des Scriptblocks, in welchem die Dateiinhalte geändert werden:
$replace_all = array ('ä' => '¨', 'ö' => 'ö', 'ü' => 'ü',
'Ä' => 'Ä', 'Ö' => 'Ö', 'Ü' => 'Ü', 'ß' => 'ß',
'§' => '§', '€' => '€');
Das Array $replace_all ist oben mit gängigen Entities aufgefüllt und kann selbstverständlich
beliebig ergänzt werden. Wichtig dabei ist die schrittweise, korrekte Ergänzung:
, (Komma) + "..." zu ersetzender String + => + "..." String mit welchem
ersetzt wird.
PHP ist sehr großzügig im Verarbeiten von Arrays. Wir raten bei der Verarbeitung von mehreren
"Riesenstrings" allerdings zur Unterteilung in mehrere Arrays und zu Mehrfachaufrufen der
Funktion: strtr().
foreach( $all_files as $key => $value){
$file = $value;
$act_file = $file;
$file = fopen($file,'r');
$inhalt = fread($file,filesize($act_file));
if(!strpos($act_file, getcwd() . '/gen_entities.php')){
$inhalt = strtr($inhalt, $replace_all);
}
Mit strpos() wird abgefragt, ob der String $act_file den Dateinamen 'gen_entities.php'
beinhaltet. Wenn ja, dann wird ein Positionswert zurück gegeben. Und die Datei-Inhalte von 'gen_entities.php'
wollen wir natürlich nicht verändern, da ansonsten die Operation beendet ist.
Bemerkung:
Dieser Ausschluss ist natürlich für alle weiteren, betroffenen PHP-Dateien vorzunehmen!!!
fclose($file);
$datei_name = $act_file;
$fp = fopen($datei_name, "w");
fwrite($fp, $inhalt);
fclose($fp);
Und nun zu den "etwas heikleren Operationen:" fopen($file,"r") ist dabei noch "harmlos", weil eine Datei nur zum Lesen geöffnet wird. Dennoch sollte Sorge dafür getragen werden, dass diese Datei auch wieder ordentlich geschlossen wird. Dafür sorgt fclose($file). Mittlerweile wurde der Dateiinhalt ausgelesen$inhalt=fread($file,filesize($act_file)), wobei die Länge der Datei mit filesize() abgefragt wird, damit die exakte Länge des Dateiinhalts in den Speicher in die Variable $inhalt geschrieben wird. Solange es sich nun bei den Dateien nicht um 'gen_entities.php' handelt, werden die Dateiiinhalte gemäß dem Array $replace_all und mittels der Funktion strtr() - also mit der Anweisung: $inhalt=strtr($inhalt, $replace_all) "übersetzt", d. h.: gemäß der Array-Zuweisungen umgewandelt. Und nun beginnt der "heikle Teil": Die Anweisung fopen($datei_name,"w") öffnet die jeweilige Datei zum Beschreiben und wenn nun "Müll" in der Variablen "$inhalt" steht, dann wandert diese "Müll" auch in die geöffnete Datei und macht diese unbrauchbar. Vollzogen wird dieser Schritt mit der Anweisung: fwrite() und danach ist es auch wirklich geschehen. Die Datei ist nun neu beschrieben, unabhängig von einem ordentlichen Abschluss mit fclose(). Auf der nächsten Seite lesen Sie noch einmal eine kurze Erklärung zur Eingabe in die Felder des Formulars. Danach können Sie sich, wie immer, den Datei-Code kopieren und nach Belieben damit verfahren. <<< Zurück zur letzten Seite | Weiter zur nächsten Seite >>> |
|