[php] Replace tekst die ook phpcode bevat.

Pagina: 1
Acties:
  • 157 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Ik heb deze code:
PHP:
1
2
3
4
5
6
7
8
9
$path = "paginamap/$page.txt";

$file = fopen ("$path","r");
$text = fread ($file, filesize ("$path"));
fclose ($file);

$text = str_replace(":)", "[img]'smile.gif'[/img]", "$text");

echo "$text";

Ik heb dus een site met de inhoud in .txt bestanden, deze worden geopend, vervolgens smile codes vervangen, en dan geëchoot.

Dat werkt op zich gewoon. Het probleem is dat er op sommige pagina's ook php code in de .txt bestanden zit, en dan zie je gewoon de code, en niet de geparste versie.

Waar los ik dit op? bij het include systeem? of de php in de .txt bestanden? en hoe?

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
preg_replace met de /e modifier, je zult de code moeten evalueren op een of andere manier, includes etc heeft allemaal geen zin zolang php niet snapt dat de gegeven tekststring een commando-regel is...

Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Een string echoën die php code bevat kan dus op geen enkele manier?

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Euh, een string echoen die php-code bevat doe je net als een gewone regel...

Maar een string echoen en alles wat er aan php-code inzit uit laten voeren dat gaat niet zomaar, zie daarvoor dus www.php.net/eval en bij vervangingen preg_replace met de /e parameter.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

't lijkt me een behoorlijk vreemde toestand, dat je smileys wil gaan replacen in een lap text, die ook php code moet bevatten :? Zou je niet gewoon enkel bij je content de smileys doen, en je content en code iets beter gescheiden houden :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
drm schreef op 25 januari 2003 @ 19:40:
't lijkt me een behoorlijk vreemde toestand, dat je smileys wil gaan replacen in een lap text, die ook php code moet bevatten :? Zou je niet gewoon enkel bij je content de smileys doen, en je content en code iets beter gescheiden houden :?
Op zich zit er ook bijna nooit php in de source, maar op enkele pagina's wél, namelijk een contact, 404 en gastenboek pagina. En anders raak ik het overzicht kwijt.

Dus ik heb nu _nog_
if (page == contact, 404 of gastenboek) {include page} else *hier die fopen/replace uit de eerste post*.

Maar ik ga wel die eval functie bestuderen, want die ziet er buitengewoon handig uit :)

thank you!

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Die eval functie is ook buitengewoon smerig, 't spijt me wel, maar over het algemeen als dat je laatste "redmiddel" is, zit je script gewoon ranzig (lees: niet zo netjes) in elkaar :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19-09 16:12
Eval is idd vaak niet nodig, misschien kun je wat meer over de code in die bestanden vertellen, of wat code posten zodat we kunnen kijken naar andere oplossingen. Overigens, zoeken naar eval op dit forum moet toch ook al aardig wat posts zoals die van drm opleveren?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

offtopic:
-quote:-----
Overigens, zoeken naar eval op dit forum moet toch ook al aardig wat posts zoals die van drm opleveren?
-------------
Ik heb zo'n flauw vermoeden dat uberhaupt een groot percentage van dergelijke posts van mij is :X

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19-09 16:12
offtopic:
Zou wel kunnen, heb het in ieders geval al vaak voorbij zien komen en toch proberen mensen het nog steeds. Ik weet niet of je een functie uit PHP zou kunnen laten verwijdere, of een verzoek daartoe in te dienen maar eval() zou bij mij op 1 staan.

[ Voor 3% gewijzigd door djluc op 27-01-2003 20:39 ]


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Zoals eerder gezegd het kan met eval() of het verstandig is, is een tweede issue.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Nee, ik gebruik niet eval, ik gebruik de oplossing van 6 pagina's posts hoger, die werkt op zich wel, maar geautomatiseerd is toch leuker :)
Door djluc - Monday 27 January 2003 17:28

Eval is idd vaak niet nodig, misschien kun je wat meer over de code in die bestanden vertellen, of wat code posten zodat we kunnen kijken naar andere oplossingen.
Ik heb een pagina met een layout, index.php genaamd.
Ik link naar pages als index.php?page=design
Vervolgens had ik include(paginamap/$page.txt) ergens in index.php staan, waar dus de inhoud van de .txt komt.

Werkte natuurlijk allemaal prima, ook als er phpcode in zat.

Maar als je smiles vervangt kan dat voor zover mijn kennis reikt niet met een include, dus doe ik het met fopen , de $page opnemen in de variabele $text en $text = str_replace(":)", "[img]'smile.gif'[/img]", "$text"); (zie ook post 1) en vervolgens echoën. Voor enkele pagina's die php bevatten maak ik een uitzondering.

[ Voor 6% gewijzigd door Blaise op 27-01-2003 20:47 . Reden: jeuj, nog hoger edit percentage ]


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Blaise schreef op 27 januari 2003 @ 20:40:
[..]
Maar als je smiles vervangt kan dat voor zover mijn kennis reikt niet met een include, dus doe ik het met fopen
[..]

Dus ga jij als verstandige programmeur netjes allemaal openen met fopen() en dan gooi je een eval() over de string, dan echo je de string, dan wordt netjes de php code uitgevoerd, en komen er ook smileys in.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Ik hoor net allemaal horrorverhalen over die functie, en jij durft mij schaamteloos dat aan te smeren? ;) Kortom: kom ik niet straks andere problemen tegen met die eval() functie die ik nu moet weten voordat ik mijn hele site hierop baseer?

* Blaise is nog een beetje huiverig..

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

In principe dezelfde problemen als je de file zou includen(). vandaar dat ik de eerste keer ook zei dat het verstandig is een andere zaak is.

In iedergeval als je de file opent in een string kan je nog functies maken die de file op bepaalde zaken controleerd zoals het aanroepen van functies die eigenlijk niet gedaan mogen worden. Dus in principe is het veiliger te maken dan de include() variant.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt natuurlijk ook output buffering aanzetten en de output afvangen met ob_get_contents etc. , smilies replacen en dan echo'en.

Acties:
  • 0 Henk 'm!

Verwijderd

Persoonlijk vind ik de eval() functie erg handig en krachtig. En zeker geen "laatste redmiddel". Mocht je eval willen gebruiken, voeg dan voor de zekerheid wel even slashes toe aan de te evalueren code om parse-errors te voorkomen. Zeker als de string HTML bevat..

voorbeeld:
$mijn_string=addslashes($mijn_string);
eval("\$mijn_string= \"$mijn_string\" ;");
$mijn_string=stripslashes($mijn_string);

suc6 :)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

pb_dj:
Persoonlijk vind ik de eval() functie erg handig en krachtig. En zeker geen "laatste redmiddel".

* drm wil een onderbouwing :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Wel grappig als je die hele code met reacties blijkbaar gaat evalueren.. Als ik dan wat PHP code aan je gastenboek toevoeg dan wordt dat gewoon uitgevoerd? :)

Het nut van het eval() voorbeeld van pb_dj ontgaat mij ook even eerlijk gezegd... (ah.. het is gewoon exact de eerste reply van php.net gekopieerd :P)

Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Ik heb de eval functie maar niet gebruikt, dat gaf weer allemaal vage errors waarvan ik geen zin heb om ze op te lossen, momenteel gebruik ik een include, tenzij de pagina php bevat, en dat zijn er toch maar 3, en anders maak ik het wel erg ingewikkeld.
Pagina: 1