phpbuddy.eu
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 04.02.2004, 19:35   #1
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Angry

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
theo ist offline   Mit Zitat antworten


Alt 04.02.2004, 22:07   #2
TP-Veteran
 
Benutzerbild von jonemo
 
Registriert seit: Dec 2002
Ort: london
jonemo macht sich hier sehr viel Mühe
Nun ja, PHP-Scripts werden vom Webserver an ihrer Dateiendung erkannt. Wie ist die denn? Und was ist der Webserver?
__________________
the daily london photo
jonemo ist offline   Mit Zitat antworten
Alt 04.02.2004, 22:23   #3
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
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?
theo ist offline   Mit Zitat antworten
Alt 04.02.2004, 23:38   #4
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
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...
Stuck Mojo ist offline   Mit Zitat antworten
Alt 05.02.2004, 18:56   #5
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
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.
theo ist offline   Mit Zitat antworten
Alt 05.02.2004, 19:21   #6
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
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).
seb ist offline   Mit Zitat antworten
Alt 05.02.2004, 19:35   #7
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
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
theo ist offline   Mit Zitat antworten
Alt 05.02.2004, 20:44   #8
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
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
theo ist offline   Mit Zitat antworten
Alt 05.02.2004, 20:57   #9
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Hast du die Funktion parse_php() mit in deinen Code eingefügt?
seb ist offline   Mit Zitat antworten
Alt 05.02.2004, 21:00   #10
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
... ja klar. meine codes sind nicht so schlecht, wie mein ruf!
theo ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
templates: php-script im quellcode sichtbar templates: php-script im quellcode sichtbar
« Maximale tabellengröße | Hyperlinks in MySQL »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
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


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

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67