Datei einfügen aus Ausgabepuffer, damit PHP Code funktionier
Homer J
- php
Hallo!
Ich möchte eine Datei einlesen, das Suchwort darin markieren und die Datei ausgeben. Damit der PHP Code in der Datei selbst auch funktionsfähig ausgegeben wird, wurde mir geraten die ausgabe erstmal in den Ausgabepuffer abzulegen, zu bearbeiten, also das Suchwort markieren und anschließend auszugeben. Dies habe ich folgendermaßen getan:
// Wenn eine Seite über die Suchfunktion aufgerufen wird
if(isset($_GET['rslt'])) {
ob_start();
$kw = htmlentities($_GET['kw'],ENT_QUOTES);
$datei = $_GET['rslt'];
// Inhalt der Datei wird eingelesen und das Suchwort markiert
$HandleDatei = fopen ($datei, "r");
$CntDatei = fread ($HandleDatei, filesize ($datei));
$suchmuster = '/('.preg_quote($kw).')/i';
$ersetzungen = '<span class="error">\1</span>'; // 1 Backreferenz auf das gefundene Keyword
$ChgDatei = preg_replace($suchmuster, $ersetzungen, $CntDatei);
echo $ChgDatei; // !!! PHP Code aus den Zeilen wird nicht ausgeführt
$DateiEcho = ob_get_contents();
ob_end_clean();
echo $DateiEcho;
}
Der PHP Code wird aber nicht ausgeführt, weis jemand warum nicht?
Gruß
Homer J
Hallo Homer.
Der PHP Code wird aber nicht ausgeführt, weis jemand warum nicht?
Wird der Quellcode deines PHP-Scriptes ausgegeben? Wenn nicht, dann wurde das Script interpretiert, dein Interpreter funktioniert dann also.
Schauen wir uns also schrittweise einmal dein Script an:
// Wenn eine Seite über die Suchfunktion aufgerufen wird
if(isset($_GET['rslt'])) {
ob_start();
$kw = htmlentities($_GET['kw'],ENT_QUOTES);
$datei = $_GET['rslt'];
Ist der Wert von $\_GET['rslt'] wirklich eine existente und lesbare Datei?
> ~~~php
// Inhalt der Datei wird eingelesen und das Suchwort markiert
> $HandleDatei = fopen ($datei, "r");
Du legst hiermit ein Dateihandle an, ohne zu überprüfen, ob die Datei überhaupt erfolgreich gelesen werden konnte. Überprüfe also den Rückgabewert der fopen-Funktion auf FALSE.
~~~php
[...]
$ersetzungen = '<span class="error">\1</span>'; // 1 Backreferenz auf das gefundene Keyword
Merkwürdige Klassifizierung eines Schlüsselwortes ...
> ~~~php
$ChgDatei = preg_replace($suchmuster, $ersetzungen, $CntDatei);
> echo $ChgDatei; // !!! PHP Code aus den Zeilen wird nicht ausgeführt
Sicher? Ich schätze viel eher, dass ein Leerstring infolge von oben genanntem FALSE ausgegeben wird. Nutze für solcherlei Kontrollausgaben besser print_r oder var_dump.
> [code lang=php]$DateiEcho = ob_get_contents();
> ob_end_clean();
> echo $DateiEcho;
Die letzten drei Schritte kannst du zu ob_flush zusammenfassen.
Einen schönen Mittwoch noch.
Gruß, Mathias