06. februar 2006 - 14:59Der er
12 kommentarer og 1 løsning
eval af html fil
Hej.
Jeg har en php klasse, hvor jeg har en funktion der laver en eval() på en streng. Strengen er en html fil indlæst i en variabel vha. file_get_contents().
I html filen skriver jeg fx. { $this->function() }, for at kalde en funktion.
Nu skal jeg bruge den include() funktion der er i php, men hele php koden bliver bare udskrevet. Altså det der er mellem {} tegnende.
det gør jeg heller ikke. hvis du havde læst min forklaring, beskriver jeg netop at jeg smider hele html koden ind i en streng som der bliver lavet en eval() på. Dvs. at al php kode der er i html filen, bliver bytte ud med det de enkelte funktioner retuner.
en file_get_contents() i stedet for include() ville nok være bedre, da den fil jeg vil indkludere er en html fil. Men selvom jeg prøver at kalde den funktion, bliver den stadig bare udskrevet som om det var en tekst streng.
altså .. undskyld, men jeg forstår ikke helt spørgsmålet.. hovedspørgsmålet ser ud til at være "Hvordan kalder jeg php definineret funktioner?", og der ville svaret være noget lignende med: "minFunktion();" .. hvis det ikke er det svar du ønsker, tror jeg desværre ikke jeg kan hjælpe.. =/ undskyld min konstante trang til at lægge svar før jeg læser spørgsmålet godt og grundigt..
Jeg forstår heller ikke, hvad du mener med spørgsmålet. Men måske er svare at du ikke skal bruge { $this->function() } men <? $this->function() ?> i den htmlfil du inkluderer.
webpsycho: ok, med 'php defineret funktion' mener jeg funktioner der er i php og derfor ikke funktioner jeg selv har lavet. Jeg skal bruge file_get_contents(), men da den ikke har $ foran, kan jeg ikke skrive { $this->.. } for at kalde den. Man kalder fx. GET variabler med $_GET[], men jeg kan ikke finde nogen dokumenation på hvordan man kalder php funktioner.
erikjacobsen: Måske. Har ikke prøvet. Men tror ikke det vil hjælpe, da det ville indføre en startende php tag midt i en, i forevejen startet, php kode. Altså <?php ..kode.. <? $this->function() ?> ..kode.. ?>. Det kan man vidst ikke.
PS. spørgsmålet går heller ikke på om det skal være {} eller noget andet, for den del fejler intet. Det virker med alle mine egne defineret funktioner. Problemet er helt alene, hvordan jeg kalder php defineret funktioner, som fx. file_get_contents(), så eval() opfatter den og dermed bliver evalueret.
Jeg kunne måske lige tilføje, at hele formålet med dette cirkus, er at jeg vil normalt ville bruge <!-- #include virtual="" --> til at smide menuen ind på siden. Da en #include bliver læst FØR php kompilere html kode, kan jeg ikke bruge denne metode. Jeg har ikke kunde finde nogen bedre metode pt.
Er du sikker på at eval() laver noget ved det du smider den ind i? Er det en HTML fil? eval() antager at det er PHP... Har du kigget på kommentarerne på http://dk.php.net/eval ?
docerdk: det er lige præcis dit sidste forslag jeg benytter mig af. Om filens ext. er .txt eller .html betyder intet for eval(). Som sagt køre jeg funktionen i en klasse, dvs. jeg koder php OO (Objekt Orienteret). Så da eval() funktionen bliver kørt inde i klassen er den selv en del af en <?php ?> kode, derfor virker det med en ren html/txt fil.
Men for at skære igennem: Det jeg mangler, er en måde at lave #include på. Det behøver ikke være #include der bliver brugt, jeg skal bare have den funktionalitet. Meget gerne høre forslag til at opnå dette.
Nej det har jeg prøvet. Men har fundet ud af noget:
Når man bruger eval() og kalder funktioner i txt/html filen, SKAL man omgive funktionskaldet med {}, som jeg havde gjort. Der må bare IKKE være mellemrum mellem { og første tegn og } og sidste tegn..
Jeg prøvede kort at kalde file_get_contents() med {} rundt om uden mellemrum, men det blev ikke evalueret. Så jeg tror ikke man kan kalde php indbyggede funktioner på denne måde. Jeg lagde bare file_get_contents() i min egen funktion og vupti, så kan jeg kalde html filer, inden i andre html filer. Det bliver lidt rekursivt, men da det drejer sig om et meget lille antal filer pr. side, betyder det intet for serverens hukommelse.
Håber nogen kan bruge det :) Og tak for jeres tid og hjælp.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.