Dateiinhalt replacen

honeyboy

Mitglied
hélas,

angenommen, ich habe eine Datei, in der irgendein Text steht. Ich möchte mit PHP diese Datei öffnen, bestimmte Textstücke/Inhalte durch andere ersetzen und das dann wenn möglich ausgeben.
Jetzt meine Frage: Wie kann ich das erledigen? str_replace oder ähnliches wird wohl kaum funktionieren, da im Grunde ja kein String vorhanden ist. mit file() etc. möchte ich ehrlich gesagt nicht wirklich arbeiten, davor "fürcht" ich mich ein wenig XD
Gibts da noch irgendeine andere Möglichkeit, das zu erledigen? Oder muss ich mit den File-Befehlen arbeiten?
 
warum möchtest du nicht mit file() o.Ä. arbeiten?

Was spricht denn hier gegen:
PHP:
$inhalt = file_get_contents("text.txt");
$neuer_inhalt = str_replace("zu_ersetzen", "ersatz", $inhalt);

// jetzt ggf. den neuen Inhalt ausgeben
echo $neuer_inhalt;

// oder auch einfach wieder in die Datei speichern etc.

Falls du komplizierte Sachen suchen und ersetzen willst, dann musst du anstatt str_replace wohl auf preg_replace zurückgreifen.
 
Ja, mir wird wohl nichts anderes überrig bleiben ;)

Naja, die file-commands sind mir irgendwie "zu groß", bisher hab ich da nicht so wirklich durchgeblickt.... (ok, hab mich auch noch nicht wirklich damit befasst, aber bei einem kleinen Kapitel in meinem Buch, in dems behandelt wird, hats mir nen komplizierten Eindruck gemacht. Außerdem hats mir damals ziemlich umständlich ausgesehen, das zu erreichen was man will ;) )

Aber dein Beispiel oben sieht eigentlich leicht nachvollziehbar aus, vlt. sollt ich mich wirklich mal näher in diese Thematik einarbeiten. Vielen Dank! :)
 
Naja, das ganze in eine Datei zu schreiben ist nicht schwer:
Code:
$sFile = "datei.txt"
$sOld  = file_get_contents($sFile);
$sNew  = str_replace("AltesWort", "NeuesWort", $sOld)

$fileHandle = fopen($sFile, "w");
fputs($fileHandle, $sNew);
fclose($fileHandle)
Erklärung:
Zeile 1-3 kennst du ja schon.
Zeile 5 öffnet die Datei, um sie später zu verarbeiten. Der erste Parame-
ter ist der Name der Datei, der zweite der Modus.
Modi:
  • w: Write; Öffnet die Datei und löscht den ganze Inhalt. Wenn sie nciht existiert wird sie angelegt. Das ist z.B. sinnvoll, wenn, wie in deinem Fall, die Datei komplett neu geschrieben werden muss.
  • r: Read; Die Datei kann nur gelesen werden, nicht aber beschrieben.
  • a: Append; Alles was in die Datei geschrieben wird, sei es per fputs, oder mit fwrite, wird an den bestehenden Inhalt angehängt.
Zusätzlich kann an die Modi noch ein b angehängt werden, was bedeuted,
dass die Datei im Binär-Format gelesen und beschrieben wird.

Dann gibt es noch die Option +, die den jeweiligen Modus um eine Lese- oder
Schreib-Fähigkeit erweitert.
Wenn ich mich recht erinnere wäre ein
- a+ schreiben und lesen, schreiben im Append-Modus.
- w+ schreiben und lesen, schreiben im Write Modus.
- r+ lesen und schreiben.

In Zeile 6 wird der neue Inhalt mittels fputs (File put string) in die Datei ge-
öffnet. Die Datei wird mit dem Handle identifiziert, den fopen zurückgibt.
Der erste Parameter ist der File-Handle, der zweite der String, der geschrie-
ben werden soll.
In Zeile 7 wird der Datei-Handle wieder geschlossen.
Dies geschieht, falls fclose im Script nicht aufgerufen werden sollte, auto-
matisch am Ende des Scriptes durch den PHP Interpreter. Es ist aber normal-
erweise besserer Stil, wenn man diese Aufgabe nicht dem Interpreter
erledig- en lässt.

Weitere Infos erhälst du in der Dokumentation:

hth
 
puh, thx, DAS war ja mal ne ausführliche Info ;-) *freu*

Großes Dankeschön an euch beide! :) Habt mir wirklich sehr geholfen...
 
so....hab ein kleines Problem ;)

Code:
Fatal error: Call to undefined function: file_get_contents() in c:\programme\easyphp\www\hotels\hotels\hotels.class.php on line 27

hier die entsprechende Zeile:

Code:
$templ_cont = file_get_contents('templates/'.$templ.'');

Ordnerstruktur ist die folgende:
+hotels
-index.php
+templates
test.htm
+hotels
-hotels.class.php

Die hotels.class.php wird in der index.php includet...kann mir vlt. jemand weiterhelfen? (evtl. liegt am Filename, aber da ich da schon alle möglichen Variationen ausprobiert habe....)
 
Hmm, da hast du eine schlechte PHP-Installation.
Welcher Provider ist es denn?

Notfalls musst du dir die Funktion einfach selber schreiben.

Entweder so (nicht gerade schön):
Code:
if (!function_exists("file_get_contents")) {
    function file_get_contents($a_sFileName);
    {
        ob_start();
        $bSuccess = readfile($a_sFileName);
        $sContent = ob_get_contents();
        ob_end_clean();

        if ($bSuccess === false) {
            return false;
        } else {
            return $sContent;
        }
    }
}
Oder so:
Code:
if (!function_exists("file_get_contents")) {
    function file_get_contents($a_sFileName);
    {
        if (file_exists($a_sFileName)) {
            $fileHandle = fopen($a_sFileName, "r");
            $sContent   = fread($fileHandle, filesize($a_sFileName));
            fclose($fileHandle);

            return $sContent;
        } else {
            return false;
        }
    }
}
Wie weit das mit dem function innerhalb der IF-Struktur geht, kann ich dir nicht
sagen. Einfach mal ausprobieren ;)
 
ok, thx jedenfalls mal...

Wie der Pfad evtl. vermuten lässt, ist das ganze localhost, sprich Provider is me :D Möglicherweise liegts daran dass ich easyphp schon ein knappes halbes Jahr oder länger drauf hab und mein PHP daher nimma aufm aktuellen Stand ist, muss mal sehen, aber welcher Version die Function existiert...ansonsten muss ich sie mir einfach schreiben bzw. besser gesagt deine Version nehmen :D

EDIT: Scheinbar liegts wirklich daran, sobald ich dein Snippet einbaue werde ich mit den nächsten Fehlermeldungen bombadiert, die ein Zeile drunter liegen :D Mal sehen, muss mir wieder mal die neueste easyphp-Version saugen, evtl. gibts die auch schon mit der 5er....danke jedenfalls! :)
 
Zuletzt bearbeitet:
Zurück