App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
[PHP] String parsen
- Ersteller AMD-Hammer
- Erstellt am
AMD-Hammer
Grand Admiral Special
- Mitglied seit
- 05.10.2003
- Beiträge
- 2.760
- Renomée
- 123
- Standort
- Bornheim (Rheinland)
- Mein Laptop
- Lenovo IBM Thinkpad X301
- Prozessor
- AMD Athlon 64 X2 "Manchester" 3800+
- Mainboard
- EPoX 9NPA+ SLi
- Kühlung
- Zalman CNPS 7700-Cu
- Speicher
- 4x 1GB G.Skill CL3 F1-3200PHU2-2GBNT
- Grafikprozessor
- XFX GeForce 7600 GT
- Display
- 2x 17 Zoll TFT LG Flatron L1710S
- HDD
- Hitachi 1TB HDT721010SLA360, Samsung 160GB 1614N, Samsung 200GB 2014N, IBM Hitachi GXP180 120 GB
- Optisches Laufwerk
- LG GSA 4163A
- Gehäuse
- Coolermaster CAV-T03
- Netzteil
- Seasonic S12 600 Watt
- Betriebssystem
- Debian GNU/Linux 5.0.1 AMD64
- Webbrowser
- Firefox
Hallo zusammen,
ich arbeite derzeit an einer Art Template Engine in PHP. Diese greift Templatedateien zu liest diese Zeile für Zeile aus und ersetzt die Platzhalter durch die korrekten Werte.
Nun ist jedoch ein problem bei dynamischen Navigationsleisten. Diese können ja nicht starr vorgegeben sein. Daher wird an dieser Stelle ein entsprechende Schleife (while oder for) eingesetzt. Das funktioniert soweit auch alles prächtig nur ist das Problem, dass ich ja jetzt Code in den Ausgabestring geschrieben habe und dieser nicht nochmal vom PHP-Parser interpretiert wird.
Ich meine mich zu erinnern, dass es eine Funktion gibt, mit der man einen String parsen lassen kann, aber der Name will mir absolut nicht einfallen und Google war bisher eher weniger hilfreich.
Nochmal zum verdeutlichen. In dem String den ich am Ende des Scriptes ausgebe steht PHP Code drin, der nochmal verarbeitet werden muss und anstatt, dass er dies tut verschwindet der code halt einfach und ist weder auf dem Bildschirm noch im HTML Quellcode der Seite zu finden.
Ich hoffe ihr könnt mir helfen und vor allem hoffe ich ihr habt verstanden, was ich überhaupt suche
Danke schonmal
P.S.: Wenn ich den string in eine temporäre Datei schreibe und diese dann includiere funktionierts, aber das ist nicht wirklich akzeptabel, da der Server damit ja andauernd mit dem schreiben von temp daten beschäftigt wäre und das imho nicht sonderlich gesund ist.
ich arbeite derzeit an einer Art Template Engine in PHP. Diese greift Templatedateien zu liest diese Zeile für Zeile aus und ersetzt die Platzhalter durch die korrekten Werte.
Nun ist jedoch ein problem bei dynamischen Navigationsleisten. Diese können ja nicht starr vorgegeben sein. Daher wird an dieser Stelle ein entsprechende Schleife (while oder for) eingesetzt. Das funktioniert soweit auch alles prächtig nur ist das Problem, dass ich ja jetzt Code in den Ausgabestring geschrieben habe und dieser nicht nochmal vom PHP-Parser interpretiert wird.
Ich meine mich zu erinnern, dass es eine Funktion gibt, mit der man einen String parsen lassen kann, aber der Name will mir absolut nicht einfallen und Google war bisher eher weniger hilfreich.
Nochmal zum verdeutlichen. In dem String den ich am Ende des Scriptes ausgebe steht PHP Code drin, der nochmal verarbeitet werden muss und anstatt, dass er dies tut verschwindet der code halt einfach und ist weder auf dem Bildschirm noch im HTML Quellcode der Seite zu finden.
Ich hoffe ihr könnt mir helfen und vor allem hoffe ich ihr habt verstanden, was ich überhaupt suche
Danke schonmal
P.S.: Wenn ich den string in eine temporäre Datei schreibe und diese dann includiere funktionierts, aber das ist nicht wirklich akzeptabel, da der Server damit ja andauernd mit dem schreiben von temp daten beschäftigt wäre und das imho nicht sonderlich gesund ist.
OBrian
Moderation MBDB, ,
- Mitglied seit
- 16.10.2000
- Beiträge
- 17.033
- Renomée
- 267
- Standort
- NRW
- Prozessor
- Phenom II X4 940 BE, C2-Stepping (undervolted)
- Mainboard
- Gigabyte GA-MA69G-S3H (BIOS F7)
- Kühlung
- Noctua NH-U12F
- Speicher
- 4 GB DDR2-800 ADATA/OCZ
- Grafikprozessor
- Radeon HD 5850
- Display
- NEC MultiSync 24WMGX³
- SSD
- Samsung 840 Evo 256 GB
- HDD
- WD Caviar Green 2 TB (WD20EARX)
- Optisches Laufwerk
- Samsung SH-S183L
- Soundkarte
- Creative X-Fi EM mit YouP-PAX-Treibern, Headset: Sennheiser PC350
- Gehäuse
- Coolermaster Stacker, 120mm-Lüfter ersetzt durch Scythe S-Flex, zusätzliche Staubfilter
- Netzteil
- BeQuiet 500W PCGH-Edition
- Betriebssystem
- Windows 7 x64
- Webbrowser
- Firefox
- Verschiedenes
- Tastatur: Zowie Celeritas Caseking-Mod (weiße Tasten)
Meinst Du eval() ?
siehe http://de.php.net/manual/de/function.eval.php
Aber ich denke, man könnte evtl. besser helfen, wenn wir einen kleinen Codeschnipsel sehen.
siehe http://de.php.net/manual/de/function.eval.php
Aber ich denke, man könnte evtl. besser helfen, wenn wir einen kleinen Codeschnipsel sehen.
AMD-Hammer
Grand Admiral Special
- Mitglied seit
- 05.10.2003
- Beiträge
- 2.760
- Renomée
- 123
- Standort
- Bornheim (Rheinland)
- Mein Laptop
- Lenovo IBM Thinkpad X301
- Prozessor
- AMD Athlon 64 X2 "Manchester" 3800+
- Mainboard
- EPoX 9NPA+ SLi
- Kühlung
- Zalman CNPS 7700-Cu
- Speicher
- 4x 1GB G.Skill CL3 F1-3200PHU2-2GBNT
- Grafikprozessor
- XFX GeForce 7600 GT
- Display
- 2x 17 Zoll TFT LG Flatron L1710S
- HDD
- Hitachi 1TB HDT721010SLA360, Samsung 160GB 1614N, Samsung 200GB 2014N, IBM Hitachi GXP180 120 GB
- Optisches Laufwerk
- LG GSA 4163A
- Gehäuse
- Coolermaster CAV-T03
- Netzteil
- Seasonic S12 600 Watt
- Betriebssystem
- Debian GNU/Linux 5.0.1 AMD64
- Webbrowser
- Firefox
Okay, dann hier mal nen bisschen pseudo code (denn die inzwischen 780Zeilen Code würden wohl den Rahmen sprengen).
Der String der im Endeffekt aus der Generierung hervorgeht sieht so in etwa aus:
Und das Problem ist halt, dass er das "for" nicht weiter interpretiert sondern einfach ignoriert (wird wie gesagt weder im code noch auf dem bildschirm angezeigt).
Mit eval hab ich gerade schon nen bissel rumgespielt, aber wenn irgendwie funktioniert das net so ganz. Wenn wir mal davon ausgehen das die variable in der der obere code drin steht $output heißt, dann hab ich es so mit eval probiert.
Allerdings bekomme ich dann nur die Fehlermeldung:
Der String der im Endeffekt aus der Generierung hervorgeht sieht so in etwa aus:
PHP:
<html>
<head>...</head>
<body>
text text text
<ul>
<?php for($i = 0; $i <= 3; $i++) { ?>
<li>
<a href="link.html">Linkname</a>
</li>
<?php } ?>
</ul>
Mit eval hab ich gerade schon nen bissel rumgespielt, aber wenn irgendwie funktioniert das net so ganz. Wenn wir mal davon ausgehen das die variable in der der obere code drin steht $output heißt, dann hab ich es so mit eval probiert.
PHP:
eval ("\$output = \"$output\";");
echo $output;
Allerdings bekomme ich dann nur die Fehlermeldung:
Parse error: syntax error, unexpected '<' in /datei.php(80) : eval()'d code on line 3
OBrian
Moderation MBDB, ,
- Mitglied seit
- 16.10.2000
- Beiträge
- 17.033
- Renomée
- 267
- Standort
- NRW
- Prozessor
- Phenom II X4 940 BE, C2-Stepping (undervolted)
- Mainboard
- Gigabyte GA-MA69G-S3H (BIOS F7)
- Kühlung
- Noctua NH-U12F
- Speicher
- 4 GB DDR2-800 ADATA/OCZ
- Grafikprozessor
- Radeon HD 5850
- Display
- NEC MultiSync 24WMGX³
- SSD
- Samsung 840 Evo 256 GB
- HDD
- WD Caviar Green 2 TB (WD20EARX)
- Optisches Laufwerk
- Samsung SH-S183L
- Soundkarte
- Creative X-Fi EM mit YouP-PAX-Treibern, Headset: Sennheiser PC350
- Gehäuse
- Coolermaster Stacker, 120mm-Lüfter ersetzt durch Scythe S-Flex, zusätzliche Staubfilter
- Netzteil
- BeQuiet 500W PCGH-Edition
- Betriebssystem
- Windows 7 x64
- Webbrowser
- Firefox
- Verschiedenes
- Tastatur: Zowie Celeritas Caseking-Mod (weiße Tasten)
Ja, weil Du mit dem ?> das PHP ja zumachst, das wirft alles aus der Bahn. Du könntest das escapen, aber das wird imho zu fitzelig. Lass doch innerhalb des Strings lieber die php-Tags weg und schreib die HTML-Anweisungen in Echos. D.h. man schreibt PHP-Code mit HTML-Schnipseln drin statt HTML-Code mit PHP-Schnipseln.
Also
Mußt dann natürlich innerhalb des HTML-Kontextes die Anführungsstriche durch Apostrophe ersetzen, sonst beendest Du ja das echo.
Also
PHP:
echo "<html>
<head>...</head>
<body>
text text text
<ul>";
for($i = 0; $i <= 3; $i++) {
echo "<li>
<a href='link.html'>Linkname</a>
</li>";
}
echo "</ul>";
Zuletzt bearbeitet:
Bitspyer
Admiral Special
- Mitglied seit
- 12.10.2002
- Beiträge
- 1.010
- Renomée
- 43
- Standort
- Mainz
- Mein Laptop
- Wintermute
- Prozessor
- Intel i5-6500
- Mainboard
- Asrock H170 Pro4s
- Kühlung
- Boxed
- Speicher
- 2x8 GB Kingston
- Grafikprozessor
- GeForce 960GTX
- Display
- LG 22
- SSD
- Samsung 840, Crucial MX100
- HDD
- 1x WD EARX 2TB
- Optisches Laufwerk
- Nec 3500 DVDR/RW, Toshiba DVD-ROM
- Soundkarte
- X-FI Music
- Gehäuse
- Bitfenix Shinobi 3.0
- Netzteil
- BeQuiet 500W
- Betriebssystem
- Gentoo , Windows 7
- Webbrowser
- Firefox
Bitte was?
Der Interpreter hört gar nicht bei ?> auf zu parsen, sondern geht das ganze Dokument durch.
Man sollte es nur nicht machen, weil es sonst nicht sehr gut lesbar ist.
@AMDHammer
Dein Fehler muss wo anders sein. Hab mal dein Snipplet gerade getestet und die Schleife wird abgearbeitet.
Von wo kommen denn die Wert von $i?
Btw: Schau Dir mal die Smarty-Template-Engine an unter http://smarty.php.net
Warum immer das Rad neu erfinden
Der Interpreter hört gar nicht bei ?> auf zu parsen, sondern geht das ganze Dokument durch.
Man sollte es nur nicht machen, weil es sonst nicht sehr gut lesbar ist.
@AMDHammer
Dein Fehler muss wo anders sein. Hab mal dein Snipplet gerade getestet und die Schleife wird abgearbeitet.
Von wo kommen denn die Wert von $i?
Btw: Schau Dir mal die Smarty-Template-Engine an unter http://smarty.php.net
Warum immer das Rad neu erfinden
Zuletzt bearbeitet:
AMD-Hammer
Grand Admiral Special
- Mitglied seit
- 05.10.2003
- Beiträge
- 2.760
- Renomée
- 123
- Standort
- Bornheim (Rheinland)
- Mein Laptop
- Lenovo IBM Thinkpad X301
- Prozessor
- AMD Athlon 64 X2 "Manchester" 3800+
- Mainboard
- EPoX 9NPA+ SLi
- Kühlung
- Zalman CNPS 7700-Cu
- Speicher
- 4x 1GB G.Skill CL3 F1-3200PHU2-2GBNT
- Grafikprozessor
- XFX GeForce 7600 GT
- Display
- 2x 17 Zoll TFT LG Flatron L1710S
- HDD
- Hitachi 1TB HDT721010SLA360, Samsung 160GB 1614N, Samsung 200GB 2014N, IBM Hitachi GXP180 120 GB
- Optisches Laufwerk
- LG GSA 4163A
- Gehäuse
- Coolermaster CAV-T03
- Netzteil
- Seasonic S12 600 Watt
- Betriebssystem
- Debian GNU/Linux 5.0.1 AMD64
- Webbrowser
- Firefox
@Bitspyer
Wo der Wert $i herkommt? Den definier ich doch in der for-schleife. das war nur ein beispiel.
Ich weis, dass es Smarty schon gibt und das smarty auch recht mächtig ist, aber da ich die engine für mein cms nutzen werde will ich da nicht so was aufgeblasenes wie smarty einsetzen. So kann ich halt die Engine an das CMS anpassen und nicht andersrum.
Wie hast du denn den Snipplet getestet?
@ OBrian
Ich werd das mal ausprobieren, aber ich hab eigentlich schon fast aus der not eine tugend gemacht.
Statt jedesmal den php-interpreter schufften zu lassen, wenn die Seite generiert wird, wird die seite einfach lokal als temp file gespeichert und erst nach bestimmter zeit (zB einer Woche) bzw. sobald sich etwas in der Datenbank verändert neu generiert, bzw gelöscht. Damit sinkt dann der SQL Traffic und die Last die der PHP Interpreter erzeugt um einiges ab. Und da ich das geschriebene file dann einfach per include einbinden kann wird es auch nochmal durch den interpreter gejagt und *TADA* schon funktionierts.
Wo der Wert $i herkommt? Den definier ich doch in der for-schleife. das war nur ein beispiel.
Ich weis, dass es Smarty schon gibt und das smarty auch recht mächtig ist, aber da ich die engine für mein cms nutzen werde will ich da nicht so was aufgeblasenes wie smarty einsetzen. So kann ich halt die Engine an das CMS anpassen und nicht andersrum.
Wie hast du denn den Snipplet getestet?
@ OBrian
Ich werd das mal ausprobieren, aber ich hab eigentlich schon fast aus der not eine tugend gemacht.
Statt jedesmal den php-interpreter schufften zu lassen, wenn die Seite generiert wird, wird die seite einfach lokal als temp file gespeichert und erst nach bestimmter zeit (zB einer Woche) bzw. sobald sich etwas in der Datenbank verändert neu generiert, bzw gelöscht. Damit sinkt dann der SQL Traffic und die Last die der PHP Interpreter erzeugt um einiges ab. Und da ich das geschriebene file dann einfach per include einbinden kann wird es auch nochmal durch den interpreter gejagt und *TADA* schon funktionierts.
Bitspyer
Admiral Special
- Mitglied seit
- 12.10.2002
- Beiträge
- 1.010
- Renomée
- 43
- Standort
- Mainz
- Mein Laptop
- Wintermute
- Prozessor
- Intel i5-6500
- Mainboard
- Asrock H170 Pro4s
- Kühlung
- Boxed
- Speicher
- 2x8 GB Kingston
- Grafikprozessor
- GeForce 960GTX
- Display
- LG 22
- SSD
- Samsung 840, Crucial MX100
- HDD
- 1x WD EARX 2TB
- Optisches Laufwerk
- Nec 3500 DVDR/RW, Toshiba DVD-ROM
- Soundkarte
- X-FI Music
- Gehäuse
- Bitfenix Shinobi 3.0
- Netzteil
- BeQuiet 500W
- Betriebssystem
- Gentoo , Windows 7
- Webbrowser
- Firefox
Ich hab Deinen Code 1:1 kopiert, noch ein </body> und </html> dran gehängt durch meinen Webserver gejagt. (Apache2 mit php5)
Ja und wegen $i... Kurzer IRQ Aussetzer...
Ja und wegen $i... Kurzer IRQ Aussetzer...
Zuletzt bearbeitet:
AMD-Hammer
Grand Admiral Special
- Mitglied seit
- 05.10.2003
- Beiträge
- 2.760
- Renomée
- 123
- Standort
- Bornheim (Rheinland)
- Mein Laptop
- Lenovo IBM Thinkpad X301
- Prozessor
- AMD Athlon 64 X2 "Manchester" 3800+
- Mainboard
- EPoX 9NPA+ SLi
- Kühlung
- Zalman CNPS 7700-Cu
- Speicher
- 4x 1GB G.Skill CL3 F1-3200PHU2-2GBNT
- Grafikprozessor
- XFX GeForce 7600 GT
- Display
- 2x 17 Zoll TFT LG Flatron L1710S
- HDD
- Hitachi 1TB HDT721010SLA360, Samsung 160GB 1614N, Samsung 200GB 2014N, IBM Hitachi GXP180 120 GB
- Optisches Laufwerk
- LG GSA 4163A
- Gehäuse
- Coolermaster CAV-T03
- Netzteil
- Seasonic S12 600 Watt
- Betriebssystem
- Debian GNU/Linux 5.0.1 AMD64
- Webbrowser
- Firefox
Ich hab Deinen Code 1:1 kopiert, noch ein </body> und </html> dran gehängt durch meinen Webserver gejagt. (Apache2 mit php5)
Ja klar, dann funktioniert der Code sauber. Das Problem is aber, dass der Code generiert wird. Das heißt das was du da siehst is das was rauskommt, nachdem der Interpreter das erste mal drüber gelaufen ist. Wenn du das nochmal durch den Interpreter jagst (was du ja machst, wenn du den quellcode 1:1 kopiert hast), dann wird die schleife sauber ausgeführt.
Die Sache ist wie kann ich ihm sagen, dass er den Code (siehe oben) der in der variable $output steht nochmals durch den interpreter schicke.
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 35K
- Antworten
- 7
- Aufrufe
- 671