phpbar.de logo

Mailinglisten-Archive

[php] Dateien einlesen, Code ausführen und Ausgeben

[php] Dateien einlesen, Code ausführen und Ausgeben

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Jul 25 09:22:45 CEST 2006


Hi Sven,

Am Dienstag, 25. Juli 2006 08:52 schrieb Sven Geßner:
> wahrscheinlich gibt es hierfür eine einfache Antwort, aber ich bin
> halt noch Anfänger....

das folgende Problem ist in dem Sinne keine Anfängerfrage. :-) Es ist 
eher eine Frage des Anwendungsdesigns. Deswegen gibt es auch eine Menge 
unterschiedlicher, teils gegensätzlicher Lösungansätze. Welcher davon 
sinnvoll ist, hängt eigentlich dann von den individuellen Umständen ab. 
Ohne Deine gesamte Anwendung zu kennen, kann Dir also niemand den 
ultimativen Rat geben. :-)

> Problem:
>
> Ich habe eine Seite mit fertigem Desing das soweit statisch ist.
> Nur der Inhalt eines Div-Containers ändert sich und soll dynamisch
> eingelesen, Code ausgeführt in einer Variablen gespreichert werden
> und dann  ausgegeben.
>
>
> <?php
>     Datei irgendwie einlesen, Code ausführen und in
>     Variable $content speichern.
> ?>
>
>
> <html-code>
>
> <?php echo($content); ?> // den Fertigen HTML-CODE ausgeben...
>
> <html-code>
>
>
> Zur Zeit mache ich das mit include(), den ich dann direkt an der
> entsprechenden Stelle ausführe statt "echo($content)".
>
> Ich denke das ist als Lösung aber nicht wirklich sauber.

In der prozeduralen Programmierung einer bestehenden Anwendung würde ich 
das nicht als unbedingt unsauber bezeichnen. Es ist wahrscheinlich die 
performanteste Lösung. Es kommt also auch immer darauf an, wie Du die 
Prioritäten setzt.

> Wie kann ich das nochmachen.. Vielleicht mit "fopen" usw.
> aber wie kann ich dann den Code ausführen??

Die Codeausführung ließe sich mit eval() erreichen.

Die Lösung ist aber isgesamt wenig elegant. Wenn Du schon 
Dateisystem-Funktionen verwenden wolltest, dann kämen anstatt fopen() 
aus meiner Sicht eher file() oder besser, wenn Du PHP > 4.3 hast, 
file_get_contents() in Betracht (+ eval()):

  // Datei holen
  $sDateiInhalt = file_get_contents('include.inc');
  // Inhalt ausführen und ausgeben
  eval($sDateiInhalt);

Ein anderer Ansatz wäre, mit der Ausgabe-Kontrolle zu arbeiten:

  // Datei einbinden und Inhalt ausführen
  ob_start();
  include('include.inc');
  $sErgebnis = ob_get_contents();
  ob_end();
  // Ergebnis ausgeben
  echo($sErgebnis);

> Oder bin ich auf dem falschen Weg und muss das genau umgekehrt
> machen, das ich die Vorlage in die PHP-datei einlese die ich ausgeben
> will.

Nein, Du bist eigentlich auf dem richtigen Weg. Es gibt folgende Stufen 
in der Entwicklung eines Programmierers:

1. Wilde Mischung von PHP und HTML, also Progammcode und Ausgabe in 
einer Datei.

2. Trennung von Programmcode und Ausgabe innerhalb der Datei. 
Programmcode oben, Ausgabe unten. Bei der Ausgabe werden weitgehend nur 
noch Variablen und If-Abfragen oder Schleifen werden eingesetzt. Das 
ist so etwa die Stufe, auf die Du jetzt zu steuerst.

3. Trennung von Programm und Ausgabe auch auf Dateiebene, d.h. die 
Verwendung von Templates. Eine fertige Lösung hierfür wäre das 
Templatesystem Smarty.

Letzteres ist natürlich der optimale Ansatz, den man auch bei neu 
aufzubauenden Anwendungen wählen sollte. Bei bestehenden Anwendungen 
ist das aber nicht immer so einfach... :-)

> Ich möchte keine fertige Lösung nutzen.

Schade. Eigentlich solltest Du Dir einfach mal Smarty ansehen. Sehr 
einfach zu installieren. Sehr einfach zu benutzen, gleichzeitig aber 
sehr mächtig, d.h. Du kannst klein anfangen und immer mehr wachsen. :-)


Viele Grüße

Lutz

php::bar PHP Wiki   -   Listenarchive