echo soll PHP interpretieren
Ich bräuchte einmal einen kleinen Denkanstoß.
Ich baue mir mit einer Funktion eine Tabelle auf:
$file = fopen ("$datei","r");
$datei_inhalt = file($datei);
fclose($file);
echo '<table width="100%" align="center">';
for ($x=0;$x<count($datei_inhalt);$x++)
{
echo '<tr>';
echo '<td class="header">';
echo '$datei_inhalt[$x]';
echo '</td>';
$x++;
[...]
Mein "Problem" ist nun, daß im Array $datei_inhalt wieder PHP-Befehle
stehen können. Lasse ich die Funktion so wie oben laufen, werden die
PHP-Befehle mittels echo ausgegeben und nicht interpretiert.
Ich bräuchte also eine Echofunktion, die sich den Inhalt des Arrays
ansieht, PHP Befehle ausführt und _dieses_ Ergebnis dann in die Tabelle
setzt. Gibt es da einen Befehl für mich, oder muß ich das ganz anders
angehen?
-=( Rainer )=-
--
Peinliches: http://www.r-wahl.de/galerie
Airbrush FAQ: http://www.r-wahl.de/airbrush/faq.php
Baubericht ME-109 RC-Flugmodell:
http://www.r-wahl.de/modellbau/me-109/me-109.php
Re: echo soll PHP interpretieren
Rainer Wahl schrieb:
> Ich bräuchte einmal einen kleinen Denkanstoß.
> Ich baue mir mit einer Funktion eine Tabelle auf:
>
> $file = fopen ("$datei","r");
> $datei_inhalt = file($datei);
> fclose($file);
>
> echo '<table width="100%" align="center">';
>
> for ($x=0;$x<count($datei_inhalt);$x++)
> {
> echo '<tr>';
> echo '<td class="header">';
> echo '$datei_inhalt[$x]';
> echo '</td>';
>
> $x++;
> [...]
>
> Mein "Problem" ist nun, daß im Array $datei_inhalt wieder PHP-Befehle
> stehen können. Lasse ich die Funktion so wie oben laufen, werden die
> PHP-Befehle mittels echo ausgegeben und nicht interpretiert.
>
> Ich bräuchte also eine Echofunktion, die sich den Inhalt des Arrays
> ansieht, PHP Befehle ausführt und _dieses_ Ergebnis dann in die Tabelle
> setzt. Gibt es da einen Befehl für mich, oder muß ich das ganz anders
> angehen?
Das ist ein ziemlich kaputtes Konzept - lieber anders angehen. Wieso
setzt du den Inhalt nicht direkt ein?
Daniel
Re: echo soll PHP interpretieren
* Rainer Wahl wrote:
> Ich bräuchte einmal einen kleinen Denkanstoß.
> Ich baue mir mit einer Funktion eine Tabelle auf:
>
> $file = fopen ("$datei","r");
> $datei_inhalt = file($datei);
> fclose($file);
>
> echo '<table width="100%" align="center">';
>
> for ($x=0;$x<count($datei_inhalt);$x++)
> {
> echo '<tr>';
> echo '<td class="header">';
> echo '$datei_inhalt[$x]';
> echo '</td>';
>
> $x++;
> [...]
>
> Mein "Problem" ist nun, daß im Array $datei_inhalt wieder PHP-Befehle
> stehen können. Lasse ich die Funktion so wie oben laufen, werden die
> PHP-Befehle mittels echo ausgegeben und nicht interpretiert.
>
> Ich bräuchte also eine Echofunktion, die sich den Inhalt des Arrays
> ansieht, PHP Befehle ausführt und _dieses_ Ergebnis dann in die Tabelle
> setzt. Gibt es da einen Befehl für mich, oder muß ich das ganz anders
> angehen?
Mit eval wirst du das wohl lösen können, aber anders angehen wäre besser
zB über include. Dein Konzept ist zur Zeit völlig kaputt.
G.
--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt [at] bmservices.de
Re: echo soll PHP interpretieren
Rainer Wahl schrieb:
> Ich bräuchte einmal einen kleinen Denkanstoß.
> Ich baue mir mit einer Funktion eine Tabelle auf:
>
> $file =3D fopen ("$datei","r");
> $datei_inhalt =3D file($datei);
> fclose($file);
>
> echo '<table width=3D"100%" align=3D"center">';
>
> for ($x=3D0;$x<count($datei_inhalt);$x++)
> {
> echo '<tr>';
> echo '<td class=3D"header">';
> echo '$datei_inhalt[$x]';
> echo '</td>';
>
> $x++;
> [...]
>
> Mein "Problem" ist nun, daß im Array $datei_inhalt wieder PHP-Befehle=
> stehen können. Lasse ich die Funktion so wie oben laufen, werden die =
> PHP-Befehle mittels echo ausgegeben und nicht interpretiert.
Die Anwort auf deine Frage lautet: http://www.php.net/eval .
Allerdings wann immer eine Antwort "eval()" lautet dann ist die Frage
falsch bzw. die Vorausetzung welche zur Frage fuehrte.
> Ich bräuchte also eine Echofunktion, die sich den Inhalt des Arrays
> ansieht, PHP Befehle ausführt und _dieses_ Ergebnis dann in die Tabel=
le
> setzt. Gibt es da einen Befehl für mich, oder muß ich das ganz ande=
rs
> angehen?
Es gibt Template Engines welche Programmierlogik innerhalb des HTML
Templates erlauben bzw. eigene Funktion zulassen. Als Beispiel sei Sigma =
und Smarty genannt.
Das was bei eval() ins Auge gehen kann ist wenn die Vorgaben durch
XSS/SQL Injection oder falsche Programmlogik zu unerwuenschtem Verhalten =
fuehren weil auf einem CODE ausgefuehrt wird welche du niemals im Sinn
hattest. Dadurch gefaehrdest du deine ganze Anwendung, deren Benutzer
und den Server.
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: echo soll PHP interpretieren
Rainer Wahl wrote:
> Gibt es da einen Befehl für mich, oder muß ich das ganz anders
> angehen?
Beides. eval() ist niemals die Antwort auf eine Frage. Wenn man es braucht,
braucht man danach nicht fragen.
Sag uns, was Du erreichen willst und wir sagen Dir, wie Du es richtig
machst.
Re: echo soll PHP interpretieren
Ein paar Anmerklungen am Rande:
Rainer Wahl schrieb:
> $file = fopen ("$datei","r");
> $datei_inhalt = file($datei);
> fclose($file);
Du kannst die Datei mit file() laden. fopen() und fclose() sind dabei
überflüssig und werden bei diesem Vorgang gar nicht benutzt.
> for ($x=0;$x<count($datei_inhalt);$x++)
> {
> echo '<tr>';
> echo '<td class="header">';
> echo '$datei_inhalt[$x]';
> echo '</td>';
>
> $x++;
~~~~~~~~~~ Diese Zeile ist überflüssig. $x wird austomatisch erhöht wie in
der for-Anweisung deklariert. Wundere Dich nicht, wenn die hälfte der
Zeilen ignoriert wird.
> Mein "Problem" ist nun, daß im Array $datei_inhalt wieder PHP-Befehle
> stehen können. Lasse ich die Funktion so wie oben laufen, werden die
> PHP-Befehle mittels echo ausgegeben und nicht interpretiert.
Geht es nicht wenn Du die Datei nicht mit file(), sondern mit
file_get_contents() einliest?
Martin
Re: echo soll PHP interpretieren
Jonas Werres schrieb am 09 Okt 2007:
Zuerst einmal vorab danke für die Antworten, auch an die anderen
Antwortenden.
> Sag uns, was Du erreichen willst und wir sagen Dir, wie Du es
> richtig machst.
Man kann es ja einmal versuchen... :-)
Ich würde mir die Arbeit gerne etwas erleichtern. Und zwar kommt es auf
einer Homepage immer wieder einmal vor, daß Bilder von Veranstaltungen
auf die Homepage gestellt werden sollen. Somit habe ich dann immer ca.
10-40 Bilder, welche dann in einer Tabelle dargestellt werden sollen.
In die linke Spalte das Bild und in die rechte die jeweilige
Bildbeschreibung dazu.
Nun ist es lästig, jedesmal immer wieder die Tabelle abzuändern und in
einer neuen Datei abzuspeichern. Daher habe ich mir eine Fkt.
gebastelt, die eine Datei ausliest in der Zeilenweise der Link zum Bild
und die Bildbeschreibung abwechselnd stehen. Beides wird in <td> usw.
gegossen und die Tabelle erstellt. Der Link zum Bild wird übrigens mit
PHP ausgegeben, da ich die Bilder ggf. in der Größe verändere Online.
Daher hatte ich das ursprüngliche Problem, daß die Fkt. für die Tabelle
die Datei mit den Daten auslaß und die Fkt. für die Bildgröße nicht
ausführte, sondern anzeigte im Browser.
Diese Funktion habe ich jetzt aber wieder verlassen, da ich sowieso
irgendwie die Bildbeschreibungen und Links händisch editieren muß und
ob ich das jetzt alles per Hand mache oder die Tabelle via PHP
zusammenbaue lasse, nicht den großen Unterschied macht. Aber vielleicht
hat einer von euch dazu eine Idee, wie man sich das vereinfachen kann.
-=( Rainer )=-
--
Peinliches: http://www.r-wahl.de/galerie
Airbrush FAQ: http://www.r-wahl.de/airbrush/faq.php
Baubericht ME-109 RC-Flugmodell:
http://www.r-wahl.de/modellbau/me-109/me-109.php
Re: echo soll PHP interpretieren
Martin Lemke schrieb am 10 Okt 2007:
> Du kannst die Datei mit file() laden. fopen() und fclose() sind
> dabei überflüssig und werden bei diesem Vorgang gar nicht benutzt.
Danke für den Tipp.
>> $x++;
> ~~~~~~~~~~ Diese Zeile ist überflüssig. $x wird austomatisch
> erhöht wie in der for-Anweisung deklariert. Wundere Dich nicht,
> wenn die hälfte der Zeilen ignoriert wird.
Nene, das hat schon seine Richtigkeit in diesem Fall.
> Geht es nicht wenn Du die Datei nicht mit file(), sondern mit
> file_get_contents() einliest?
Dann habe ich die Datei in einem String, anstatt in Zeilen ausgelesen.
Letzteres bräuchte ich aber.
Aber OK, ich habe das ganze Konstrukt umgebaut. Trotzdem danke!
-=( Rainer )=-
--
Peinliches: http://www.r-wahl.de/galerie
Airbrush FAQ: http://www.r-wahl.de/airbrush/faq.php
Baubericht ME-109 RC-Flugmodell:
http://www.r-wahl.de/modellbau/me-109/me-109.php
Re: echo soll PHP interpretieren
Rainer Wahl schrieb:
> Nene, das hat schon seine Richtigkeit in diesem Fall.
Es wäre vielleicht einfacher zu verstehen wenn die Manipulation des
Schleifenzählers auch nur innerhalb des Schleifenkopfes gemacht wird.
Also wie wäre es damit:
for($x = 0; $x < count($datei_inhalt); $x += 2)
Dann ersparst es dir, an zwei Stellen das $x zu erhöhen. Wie man sieht
ist es ja sehr verwirrend.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: echo soll PHP interpretieren
Christoph Herrmann schrieb am 10 Okt 2007:
> Es wäre vielleicht einfacher zu verstehen wenn die Manipulation
> des Schleifenzählers auch nur innerhalb des Schleifenkopfes
> gemacht wird. Also wie wäre es damit:
>
> for($x = 0; $x < count($datei_inhalt); $x += 2)
Ja, dann wäre es vielleicht einfacher zu verstehen gewesen, nur hätte
mein Script dann nicht mehr funktioniert.
> Dann ersparst es dir, an zwei Stellen das $x zu erhöhen. Wie man
> sieht ist es ja sehr verwirrend.
Nicht wirklich - ich hätte noch ein paar Codezeilen mehr posten können,
dann wäre es vielleicht entwirrend geworden. Da ich aber nur das
wesentliche posten wollte und sich mein Problem nun um alles, aber
nicht um die Schleife drehte, hielt ich das jetzt nicht für so wichtig.
-=( Rainer )=-
--
Peinliches: http://www.r-wahl.de/galerie
Airbrush FAQ: http://www.r-wahl.de/airbrush/faq.php
Baubericht ME-109 RC-Flugmodell:
http://www.r-wahl.de/modellbau/me-109/me-109.php
Re: echo soll PHP interpretieren
Rainer Wahl schrieb:
> Ich würde mir die Arbeit gerne etwas erleichtern.
Das wollen wir alle ;).
> Der Link zum Bild wird übrigens mit
> PHP ausgegeben, da ich die Bilder ggf. in der Größe verändere Online.
Also verstehe ich das richtig? Du hast also eine Tabelle. Da steht links
das Bild und rechts die Beschreibung, also so:
img/bild1.jpg Beschreibung
img/bild2.jpg Was anderes
und möchtest jetzt, dass PHP mit (z.B.) dem Bildlink etwas anstellt,
also Größe ändert etc. Also dann sowas:
verkleinern(img/bild1.jpg) Beschreibung
verkleinern(img/bild2.jpg) Was anderes
Oder? Wenn das der Fall ist, dann solltest du das da oben gleich
vergessen. Du solltest in der Datei nur die Bilder und die Beschreibung
speichern, dann einlesen und die Funktionen nach dem einlesen selber
ausführen. Noch ein Beispiel: Du legst eine dritte Spalte an mit der
gewünschten Breite:
1024 img/bild1.jpg Beschreibung
1024 img/bild2.jpg Was anderes
Dann liest du mit PHP erstmal die ersten beiden Werte aus, und
verwendest sie als Parameter zur Verkleinerung (oder was auch immer). So
hast du Code und Daten besser getrennt.
Hast du eine Datenbank zur Verfügung (z.B. MySQL)? Damit ginge das ganze
nämlich viel eleganter und einfacher. Das ist hier nämlich alles
ziemlich verwirrend, und ich frage mich gerade echt, ob ich das hier
wirklich abschicken soll, denn ich steige gleich selbst nicht mehr durch :D
Re: echo soll PHP interpretieren
Rainer Wahl schrieb:
> Nicht wirklich - ich hätte noch ein paar Codezeilen mehr posten können,
> dann wäre es vielleicht entwirrend geworden. Da ich aber nur das
> wesentliche posten wollte und sich mein Problem nun um alles, aber
> nicht um die Schleife drehte, hielt ich das jetzt nicht für so wichtig.
ok, dann hab ich was missverstanden, hab gedacht das ist die gesamte
Schleife. :)
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: echo soll PHP interpretieren
Adrian Ebeling schrieb am 10 Okt 2007:
[...]
> Dann liest du mit PHP erstmal die ersten beiden Werte aus, und
> verwendest sie als Parameter zur Verkleinerung (oder was auch
> immer). So hast du Code und Daten besser getrennt.
> Hast du eine Datenbank zur Verfügung (z.B. MySQL)? Damit ginge das
> ganze nämlich viel eleganter und einfacher. Das ist hier nämlich
> alles ziemlich verwirrend, und ich frage mich gerade echt, ob ich
> das hier wirklich abschicken soll, denn ich steige gleich selbst
> nicht mehr durch :D
Paßte schon. :-)
Du hast sehr gut erfasst worin mein Problem lag. Nach etwas grübeln
habe ich das jetzt aber nochmal anders gelöst. Ich habe kurzerhand eine
Fkt. geschrieben, die mir aus allen JPGs in einem Verzeichnis
einmalig Vorschaubilder erstellt, in der Größe die ich der Fkt. mit
gebe.
Für die paar wenige Fälle, bei denen sich die Vorschaubildgröße öfters
ändert, skaliert eine andere Fkt. das Bild Online hoch oder runter.
Das geht jetzt alles fix und ist auch nicht mehr "kaputt". Trotzdem
nochmal danke für die Anregungen und Antworten!
-=( Rainer )=-
--
Peinliches: http://www.r-wahl.de/galerie
Airbrush FAQ: http://www.r-wahl.de/airbrush/faq.php
Baubericht ME-109 RC-Flugmodell:
http://www.r-wahl.de/modellbau/me-109/me-109.php
Re: echo soll PHP interpretieren
* Rainer Wahl wrote:
> Für die paar wenige Fälle, bei denen sich die Vorschaubildgröße öfters
> ändert, skaliert eine andere Fkt. das Bild Online hoch oder runter.
Ich überprüfe bei generierten thumbs immer mit filemtime, ob der Thumb
älter ist als das Originalbild und generiere ihn dann einfach neu.
G.
--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt [at] bmservices.de