 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
04.02.2004, 19:35
|
#1
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
templates: php-script im quellcode sichtbar
´nabend @ all,
ich bin zur zeit etwas ratlos. ich hab eine seite mit hilfe von einer template-klasse aufgebaut. dazu hab ich die template.inc.php runtergeladen und durch eigene klassen und methoden ergaenzt.
soweit so gut!
nur werden jetzt php-scripts, die in die seite eingebunden werden im quellcode angezeigt bzw. nicht ausgefuehrt und gleich auf den browser gejagd.
gibt es eine moeglichkeit, ihn zum parsen der codes zu zwingen? mit welchen befehlen lassen sich sicher php-scripts einbinden (kein include und kein require ... klar, es soll ja an der richtigen stelle rauskommen)? hat jemand schon aehnliche erfahrungen gemacht und welche loesung behebt das problem?
bin fuer jede hilfe dankbar, weil mittlerweile voellig kopflos.
gruss
hardy
|
|
|
04.02.2004, 22:07
|
#2
|
|
TP-Veteran
Registriert seit: Dec 2002
Ort: london
|
Nun ja, PHP-Scripts werden vom Webserver an ihrer Dateiendung erkannt. Wie ist die denn? Und was ist der Webserver?
|
|
|
04.02.2004, 22:23
|
#3
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
hi jonemo,
klingt wie ein vielversprechender hinweis. danke erstmal.
der server ist derzeit ein xampp und die php-dateien werden, ich wusste mir nicht anders zu helfen, zeilenweise in eine variable uebergeben. die wird dann in die tpl-datei eingefuegt und ueber die template-klasse geparst.
nun hat meine frage nach dem sicheren einbau der php-daten schon darauf abgeziehlt, ob ich die php-teile nicht auf eine andere weise einbinden koennte.
z.z. lasse ich feststellen, ob ein bestimmtes verzeichnis existiert, dann wird das verzeichnis und anschliessend die datei geoeffnet. diese nehme ich dann zeilenweise in eine variable auf. und da koennte meiner ansicht nach schon das problem liegen.
gibt es alternativen?
|
|
|
04.02.2004, 23:38
|
#4
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Ganz davon abgesehen, dass dein "Template"-System scheinbar total vom Sinn eines Template-Systems abschweift, könnte dir eval() helfen.
Gruss
Jan
PS: Ein Template-System ist dafür da um die Ausgabe (HTML) von der Logik zu trennen...
|
|
|
05.02.2004, 18:56
|
#5
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
gruess dich jan,
zunaechst: eval hilft nicht. auf die idee war ich auch schon gekommen. auch jede menge andere befehle hab ich mittlerweile probiert, die alle nicht das ergebnis gebracht haben.
jetzt zu dem angeblichen fehler in meiner logik. z.z. zweifle ich ja schon fast selbst an mir.  aber die sache sieht so aus:
die index holt sich entsprechend der seite das tpl fuer die gesamtseite, dann kopf und fuss und zu guter letzt den inhalt.
kopf und fuss sind klar. die funzen einwandfrei und alle php-teile werden per template-klasse an die stelle der platzhalter gesetzt. klare trennung also.
jetzt stolpere ich ueber ganz banale sachen. z.b. wenn ich einen inhalt in die seite bringen will, der zwangslaeufig einen kleinen php-anteil enthalten muss. und wenn es nur ein <?=$variable?> sein sollte, deren inhalt an anderer stelle mittels script zusammengestellt wird.
ich habe module, die ohne diese aufrufe voellig sinnlos waeren. nur sehe ich in meinem quellcode den php-code.
virtual, require und include z.b. machen, was ich urspruenglich moechte. nur wird der inhalt logischerweise an der falschen stelle ausgegeben.
kann ich nicht aehnlich wie bei file_get_contents den inhalt einer kompletten datei so weitergeben, dass der eingebettete php-code beruecksichtigt wird? sowas muss doch moeglich sein!?
gruesse
hardy
ps: noch mal zu den php-aufrufen im text: es geht mir dabei hauptsaechlich um rationalitaet. ich koennte sie, wie alle anderen teile mit platzhaltern einbauen und ersetzen lassen. doch dazu muesste ich jedes mal die klasse neu aufrufen und die platzhalter definieren usw.
ist zum schluss viel umstaendlicher.
|
|
|
05.02.2004, 19:21
|
#6
|
|
TP-Veteran
Registriert seit: Jan 2002
|
Hi theo,
ein ganz ähnliches Problem hatte ich vor geraumer Zeit auch mal, und damals hatte mir Jan den genialen Tip gegeben, eine REGEXP-Funktion in Kombination mit PHP's Ausgabepuffer einzusetzen.
Sprich, du 'jagst' deinen kompletten Text durch eine Funktion, die die durch einen regulären Ausdruck beschriebenen PHP-Abschnitte an eine weitere Funktion (sogenanntes "Callback") übergibt, wo sie per eval() geparst werden.
Die dabei erzeugte Ausgabe schickst du allerdings nicht sofort an den Browser, denn dann hättest du immernoch das Problem, dass die Ausgabe der geparsten Abschnitte aus ihrer Einbettung im Text gerissen werden und davor erscheinen.
Statt dessen sammelst du die Ausgabe der Callback-Funktion im Ausgabepuffer und lässt sie am Ende den Inhalt des Puffers zurückgeben, der dann als Replacement für das von der REGEXP-Funktion gefundene Muster im String verwendet wird.
Alle Klarheiten beseitigt?
So in etwa müsste es aussehen:
PHP-Code:
preg_replace_callback('{<\?php(.+)?>}siU', 'parse_php', $string);
// callback-funktion:
function parse_php($matches)
{
$phpcode = $matches[0];
ob_start();
eval($phpcode);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
Der Codeschnipsel ist ungetestet und damit mit hoher Wahrscheinlichkeit fehlerhaft, aber vom Ansatz her müsste es so funktionieren.
Potentielle Fehlerquellen:
1. Der reguläre Ausdruck. Er sollte das Muster "<?php (irgendwas) ?>" finden und das irgendwas an die Callback-Funktion leiten - bin mir nicht sicher, ob er das jetzt so machen würde.
2. "$matches[0]" ganz oben in parse_php(): Evtl. mit "$matches[1]" testen.
Geändert von seb (05.02.2004 um 19:24 Uhr).
|
|
|
05.02.2004, 19:35
|
#7
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
hi seb,
auch, wenn es schon beim ersten mal lesen recht logisch klang, musste ich es mehrmals durchlesen und ich bin mir nicht sicher, ob ich es komplett verstanden habe.
ich werde es zunaechst mal testen und mich dann ggf. noch mal mit einer unmenge fragen zurueckmelden.
gruss
hardy
|
|
|
05.02.2004, 20:44
|
#8
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
also ...
zur zeit bekomme ich eine fehlermeldung:
warning preg_replace_callback() requires argument 2, ", to be a valid callback in ...
please tell me why!
das zweite und vielleicht weitaus groessere problem ist folgendes: die daten werden trotz des fehlers bis an den browser geleitet, nur hab ich hier keine aenderung der lage. nach wie vor der php-code im quelltext zu sehen.
darum hier noch mal mein vorgehen:
ich hab meine datei komplett in eine variable gezogen. dann hab ich den inhalt durch den regex geschickt, welcher die funktion parse_php aufruft. irgendwo ein fehler drin?
hardy
|
|
|
05.02.2004, 20:57
|
#9
|
|
TP-Veteran
Registriert seit: Jan 2002
|
Hast du die Funktion parse_php() mit in deinen Code eingefügt?
|
|
|
05.02.2004, 21:00
|
#10
|
|
TP-Specialist
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
|
 ... ja klar. meine codes sind nicht so schlecht, wie mein ruf! 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:23 Uhr.
|
 |