php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.10.2006, 11:23  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard Datei einfügen aus Ausgabepuffer, damit PHP Code funktionier

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:

PHP-Code:
// 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 ($HandleDateifilesize ($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ß
NetLook

www.werbeset.com
NetLook ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.10.2006, 12:41  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Warum sollte irgendein Code ausgeführt werden, nur weil Du eine Datei einliest?

Du verwendest den Ausgabepuffer ja nichtmal, weil da keine Ausgaben sind.

Vorschlag 1:
Datei mit include einbinden, nachdem Ausgabepufferung aktiviert wurde.
Danach im Ausgabepuffer die Ersetzung vornehmen.

Vorschlag 2:
fopen() mit URL statt Dateinamen aufrufen. Dann wird die Datei vom Apachen geparst und Du erhältst mit fread nicht die Datei selbst, sondern die Ausgabe. In der kannst Du dann die Sachen ersetzen.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 25.10.2006, 13:08  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Hi!

Zitat:
Warum sollte irgendein Code ausgeführt werden, nur weil Du eine Datei einliest?
Du verwendest den Ausgabepuffer ja nichtmal, weil da keine Ausgaben sind.
Warum verwende ich den Ausgabepuffer nicht? Ich starte ihn doch und sammel das was ausgegeben wird darin:

PHP-Code:
echo $ChgDatei

Zitat:
Vorschlag 1:
Datei mit include einbinden, nachdem Ausgabepufferung aktiviert wurde.
Danach im Ausgabepuffer die Ersetzung vornehmen.

Vorschlag 2:
fopen() mit URL statt Dateinamen aufrufen. Dann wird die Datei vom Apachen geparst und Du erhältst mit fread nicht die Datei selbst, sondern die Ausgabe. In der kannst Du dann die Sachen ersetzen.
Danke! Werde ich probieren und das Resultat melden!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 25.10.2006, 13:14  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Ups. Das erste echo hatte ich übersehen.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 25.10.2006, 13:31  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Hallo!

Dein 1 Vorschlag war direkt ein Erfolg Aber ehrlich gesagt, kann ich das Script nicht so ganz nachvollziehen, denn ich packe zwar mit Include den gesamten Inhalt der Datei in den Ausgabepuffer, aber ersetzt wird doch ein andere Inhalt, der von $CntDatei oder nicht?! Das müssten doch 2 unterschiedliche Dinge sein oder. Nähmlich einmal gibt es den Inhalt aus dem Ausgabepuffer und dann den String der durch fread() entsteht.
Daher verstehe ich nicht, das der Quellcode mit den nun markierten Wörtern ausgeben wird, da ich ja den Ausgabepuffer ausgebe.

So siehts nun aus:

PHP-Code:
// Wenn eine Seite über die Suchfunktion aufgerufen wird
    
if(isset($_GET['rslt'])) {
        
ob_start();
        
$kw htmlentities($_GET['kw'],ENT_QUOTES);
        
$datei $_GET['rslt'];
//NEU HINZUGEFÜGT
        
include($datei);
        
        
        
// Inhalt der Datei wird eingelesen das Suchwort markiert
        
$HandleDatei fopen ($datei"r");
        
$CntDatei fread ($HandleDateifilesize ($datei));
        
$suchmuster '/('.preg_quote($kw).')/i';
        
$ersetzungen '<span class="error">\1</span>'// 1 Backreferenz auf das gefundene Keyword
        
$ChgDatei preg_replace($suchmuster$ersetzungen$CntDatei);
        
$DateiEcho ob_get_contents();
        
ob_end_clean();
        echo 
$DateiEcho;
    } 
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 25.10.2006, 13:35  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Ahh, sorry, der markierte Text wird auch gar nicht ausgeben Einfach nur includet, war schon so froh, das es endlich klappt, das ich die bittere Wahrheit übersehen wollte :wink:

Ich probier nochmal!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 25.10.2006, 13:39  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Bevor Du da weiter rumprobierst.... Beim Einbinden von Dateien, deren Namen als Parameter übergeben wird, ist es unerlässlich, den Namen vorher mal zu überprüfen.

Mach irgendein Array mit erlaubten Dateinamen oder irgendwas anderes. Auf keinen Fall solltest Du ungefiltert beliebige Dateien einbinden.

Von fopen und fread war bei meinen Vorschlägen keine Rede.

Du musst in dem von ob_get_contents() zurückgelieferten Text ersetzen. Nirgends anders.

Also mal als erste ungetestete Korrektur Deines Scripts etwa so:
PHP-Code:
<?php
    
if(isset($_GET['rslt'])) {
        
ob_start();
        
$kw htmlentities($_GET['kw'],ENT_QUOTES);
        
$datei $_GET['rslt'];
// Dateinamen pruefen! Nur erlaubte Dateien einbinden!
        
include($datei);
        
$CntDatei ob_get_contents();
        
ob_end_clean();
        
        
$suchmuster '/('.preg_quote($kw).')/i';
        
$ersetzungen '<span class="error">\1</span>'// 1 Backreferenz auf das gefundene Keyword
        
$DateiEcho preg_replace($suchmuster$ersetzungen$CntDatei);
        echo 
$DateiEcho;
    }
?>
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 25.10.2006, 13:42  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

So jetzt klappt es!

PHP-Code:
// Wenn eine Seite über die Suchfunktion aufgerufen wird
    
if(isset($_GET['rslt'])) {
        
ob_start();
        
$kw htmlentities($_GET['kw'],ENT_QUOTES);
        
$datei $_GET['rslt'];
        include(
$datei);
        
        
        
$DateiEcho ob_get_contents();
        
$suchmuster '/('.preg_quote($kw).')/i';
        
$ersetzungen '<span class="error">\1</span>'// 1 Backreferenz auf das gefundene Keyword
        
$ChgDatei preg_replace($suchmuster$ersetzungen$DateiEcho);
        
ob_end_clean();
        echo 
$ChgDatei
Zitat:
Bevor Du da weiter rumprobierst.... Beim Einbinden von Dateien, deren Namen als Parameter übergeben wird, ist es unerlässlich, den Namen vorher mal zu überprüfen.

Mach irgendein Array mit erlaubten Dateinamen oder irgendwas anderes. Auf keinen Fall solltest Du ungefiltert beliebige Dateien einbinden.
Danke für den Tip, ist bereits geschehen, aber in einem anderen Script!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 25.10.2006, 13:57  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Tja, ein Problem gibt es aber immer noch! Falls das Suchwort im Code existiert, wird es auch markiert, mit <span> Tag umschlossen, was in der Ausgabe zu Fehlern führt!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 25.10.2006, 14:01  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Der in der Datei enthaltene Code wird doch gar nicht ausgegeben. Mit oder ohne <span>-Tags.
Nur die Ausgabe der Datei wird ausgegeben und darin wird ersetzt.
Wieso ist das ein Problem?
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML Code im PHP Datei möglich? raphaelf PHP Tipps 2008 10 24.07.2008 15:56
[Erledigt] Hochgeladene Datei wird doppelt abgelegt thecracked PHP Tipps 2008 3 01.07.2008 16:31
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Großer Baum -> Große Datei -> Hohe Ladezeit :( PsychoEagle PHP Tipps 2008 7 22.09.2007 12:44
Datei einlesen - ausgeben + php code ausführen NetLook PHP Tipps 2006 7 18.10.2006 15:17
Einzelne Variablen in Datei editieren snatch-ic PHP Tipps 2006 10 21.06.2006 14:55
Komisches problem mit Datei Berechtigungen stuvomatic PHP Tipps 2006 5 28.05.2006 01:49
[Erledigt] Datei mit &amp;amp;amp;amp;quot;w&amp;amp;amp;amp;quot; schreiben -&amp;amp;amp;amp;gt PHP-Fortgeschrittene 17 30.12.2005 13:58
[Erledigt] Lesbarkeit von Code Off-Topic Diskussionen 6 14.07.2005 14:48
ZIP Datei auf Server kopieren, entpacken und Inhalt in DB PHP-Fortgeschrittene 40 06.06.2005 23:33
Includete Datei nicht gleich ausgeben Madden PHP-Fortgeschrittene 1 12.05.2005 00:19
POST-Variablen in mehr als ein Datei übernehmen. PHP Tipps 2005 15 04.03.2005 15:56
Code um Verlinken einer PHP Datei PHP Tipps 2005 4 14.02.2005 12:15
xfdf Datei mit PHP an eMail senden Problem: Leere Datei PHP Tipps 2004-2 1 07.12.2004 12:25
Auslesen von Teilen einer .txt Datei PHP Tipps 2004 4 20.09.2004 20:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-tipps-2006/42633-datei-einfuegen-aus-ausgabepuffer-damit-php-code-funktionier.html, ausgabepuffer php, html code für kalenderwoche einfügen, string in ausgabepuffer kopiren php, ausgabepuffer in datei, scripte puffer in php, php buffer string, php ausgabepuffer ausgeben, php ausgabepuffer in datei, php text auf ausgabepuffer, php ausgabepuffer prüfen, bb codes php datei einfügen, php datei parsen puffer, php buffer ausgeben datei, php ausgabe einer datei einfügen, kalenderwochen einfügen php, bb code in php datei einfügen, php daten an ausgabepuffer senden, signatur forum einfügen ich putz, ausgabepuffer datei

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:23 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.