[php] eval laatse "<" in functie aanroep verdwijnt?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
Ik ben bezing met een stukje code dat helaas een eval meot gebruiken (heb echt geen zin in een enorme parser)

ik stuur het volgende de eval in:
PHP:
1
eval('functie("woei","<");');


de functie displayed dan gewoon de 2 vars,
Van het tweede argument komt echter de laatste < niet door,

Als ik er iets anders in sto, dus bijvoorbeeld:
PHP:
1
eval('functie("woei","=");');


Gaat het wel goed,
Weet iemand waarom dit gebeurt? Er zitten verder geen rare stukjes code omheen aangezien ik dit ook in een kale php file gebrobeert heb.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

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

Bosmonster

*zucht*

$functie("woei", "<");

Zo kun je ook dynamisch functie aanroepen.

[ Voor 52% gewijzigd door Bosmonster op 01-06-2004 12:38 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Het zal wel aan de implementatie van functie liggen, he! Laat daar eens wat code van zien? Heb je een 'gewone' call van functie geprobeerd? Lijkt me sterk dat het probleem dan niet optreedt.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik heb een vermoeden dat het komt omdat je naar de html geinterpreteerde output aan het kijken bent. Als je naar de source zou kijken of <pre> er omheen zet zou je zien dat je tekentje er nog gewoon staat ;).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
de string die ik wil evallen komt uit een database, inclusief de argumenten, dus gewoon variabel een functie aanroepen gaat niet.
De functie zelf (dus buiten de eval om) gaat wel gewoon goed, dat is juist het vreemde,
Daarnaast staat de "<" ook niet in de source code (de output is als ik debug bijna altijd gewoon text/plain dus is het al <pre>

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Misschien is het handig als je wat code plaatst, waaronder de functie die je probeert te gebruiken, met wat uitleg wat die functie precies moet doen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
okay,here go's

PHP:
1
2
3
4
5
6
7
8
function functie($one,$two){
 echo $one.'='.$two;
}

$string='functie("woei","<")';

// en nu de output:
eval($string.';');


En ik weet dat ik de functie beter de boel kan laten returnen, maar de echo is gewoon een debug message. De functie geeft normaal na evaluatie van de argumenten true of false terug. maar das niet interesant.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 22-06 16:52

MaxxRide

Surf's up

mmmh, ik heb er eens mee zitten spelen maar het lijkt wel een foutje in de parser. Maak er maar eens <? van, dan blijft ie gewoon hangen, maar maak je er <. b.v. dan gaat het gewoon goed.

If you are not wiping out you are nog pushing enough...


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
dus jij hebt het zelfde probleem?
Ik kom er echt niet uit, als ik er << van maak komt alleen de eerste door, als ik er iets anders achter zet gaat het ook goed, maar als ik de < direct volg door een quote ' of dubbel quote " dan gaat het mis.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
killercow schreef op 01 juni 2004 @ 13:31:
okay,here go's

PHP:
1
2
3
4
5
6
7
8
function functie($one,$two){
 echo $one.'='.$two;
}

$string='functie("woei","<")';

// en nu de output:
eval($string.';');


En ik weet dat ik de functie beter de boel kan laten returnen, maar de echo is gewoon een debug message. De functie geeft normaal na evaluatie van de argumenten true of false terug. maar das niet interesant.
Dat script werkt bij mij, zonder enige aanpassing. (WinXP, IIS, PHP4.3.4)
de output:
code:
1
woei=<

| Toen / Nu


Acties:
  • 0 Henk 'm!

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 22-06 16:52

MaxxRide

Surf's up

Ik draai trouwens PHP 4.3.1, misschien is deze "bug" in de nieuwe versie aangepast?

[ Voor 4% gewijzigd door MaxxRide op 01-06-2004 14:34 ]

If you are not wiping out you are nog pushing enough...


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
ik draai ook een iets oudere versie van php, (4.2.3), mischien zat er inderdaad een bugje in, en is deze al opgelost in nieuwere versies, tijd om m'n dev machine te updaten. :)

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 22-06 16:52

MaxxRide

Surf's up

Laat even weten of het dan werkt, ik ben zeer benieuwd :P

If you are not wiping out you are nog pushing enough...


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
ik heb net even geupdate en nu werkt het wel goed.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

killercow schreef op 01 juni 2004 @ 14:36:
tijd om m'n dev machine te updaten. :)
Dat heeft alleen zin als je productieserver ook de nieuwste versie heeft, waar de evt. bug uit is.
Anders zul je toch een of andere workaround moeten bedenken.

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
bartware schreef op 01 juni 2004 @ 14:48:
[...]
Dat heeft alleen zin als je productieserver ook de nieuwste versie heeft, waar de evt. bug uit is.
Anders zul je toch een of andere workaround moeten bedenken.
duh,

uiteraard, maar aangezien het mijn eigen servers zijn is dat geen probleem, dan moeten die ook maar geupdate worden.

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Maar als het werkt, ga je dan ook echt serieus eval gebruiken? Er is echt vrijwel altijd wel een andere oplossing te vinden met php.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
Klopt, er is uiteraard een andere oplossing te vinden, ik moet echter
OF een hele boel queries gaan doen, voor een heleboel vieuws,
OF de boel van te voren compilen, opslaan en dan met een parser doorlopen,
OF de boel van te voren compilen, en dan door eval trekken.

Ik zit nu echter met een klein foutje waardoor de return waarde van de functie binnen de eval niet doorgegeven wordt door eval zelf.
PHP:
1
2
3
4
5
6
7
8
9
10
<?
function functie($one,$two){
return $one.'='.$two;
}

$string='functie("woei","<")';

// en nu de output:
$value=eval($string.';');
?> 

Zou toch ook moeten werken volgens mij, naja ik zie wel..

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47
Volgende werkt al een stuk beter:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
function functie($one,$two){
return $one.'='.$two;
}

$string='functie("woei","<")';

// en nu de output:
$value=eval('return '.$string.';');
echo $value;
?> 

openkat.nl al gezien?

Pagina: 1