[PHP] Bug in parsen PHP-tags?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11:35
Ik kwam in PHP 4.3.9 wat vreemde dingen tegen met het parsen van PHP-tags (<? ?>) in strings met dubbele quotes en comments... Heb gezocht hier en op de PHP-site (incl. comments) maar kon niets vinden over dit vreemde gedrag, vandaar dit topic. Misschien zie ik iets stoms over het hoofd, maar even 2 code voorbeeldjes:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?PHP
error_reporting(E_ALL);

$str = <<<TEST
Dit is een test met de heredoc syntax
?>... goh knallen we uit PHP? <?
Of toch weer verder?
TEST;

echo $str;
?>

Geeft als resultaat:
Dit is een test met de heredoc syntax
?>... goh knallen we uit PHP? 

De heredoc word dus afgebroken op <?... Imho zou de string daar gewoon verder moeten gaan, maar dat gebeurd dus niet...

Nog een vreemder voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?PHP
error_reporting(E_ALL); 
$str = 'goh een {varretje} in een stukje tekst...';

//test 1x zo en delete daarna dit comment eens...
//"<?  ?>"

//replace variable statements {$variable}
$str = preg_replace("/\{([a-z]+)\}/", "<? echo \$$1; ?>", $str);

echo $str;
?>

Dit codevoorbeeld knalt eruit met een parse-error... Als je de comment //"<? ?>" echter weghaalt draait het prima. Vreemd toch dat PHP zelfs in de comment dus op zijn bek gaat over die "?>" ?

[ Voor 17% gewijzigd door Morrar op 15-03-2005 18:07 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Lijkt me wel een bug dan. Ik zou hem gewoon reporten.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 19-09 13:37
Ik krijg in het eerste voorbeeld een parse error op regel 4, in het tweede voorbeeld:
code:
1
2
3
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in \apache\htdocs\test.php on line 9

Parse error: parse error, expecting `T_VARIABLE' or `'$'' in \apache\htdocs\test.php on line 9

Dit op PHP 4.3.10 op Windows XP, ligt dus niet alleen aan 4.3.9 :)

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

Verwijderd

Als je regel 6 van het tweede voorbeeld tussen /* en */ doet gaat het wel goed.

edit:
PHP:
1
2
3
4
5
6
7
8
<?php
error_reporting(E_ALL);  

$str = 'goh een {varretje} in een stukje tekst...'; 
echo $str;

//test 1x zo en delete daarna dit comment eens... 
//?><?=$str?>


leuk zeg :)
Alles na // zou toch commentaar moeten zijn?

edit2:
http://www.php.net/manual...basic-syntax.comments.php
The "one-line" comment styles only comment to the end of the line or the current block of PHP code, whichever comes first. This means that HTML code after // ?> WILL be printed: ?> skips out of the PHP mode and returns to HTML mode, and // cannot influence that.
voorbeeld 2 is geen bug :)

[ Voor 188% gewijzigd door Verwijderd op 15-03-2005 21:15 ]


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11:35
OK, ik krijg hier (PHP 4.3.9. op FreeBSD) bij de eerste geen parse error, code werkt gewoon, behalve dat de string dus afgekapt wordt... In tweede geval wel zelfde error.

Wel vreemd dat die parse error op regel 4 komt imho... Je zou em dan eerder op 6 verwachten, maar misschien rekent PHP terug naar de assignment?

Edit: Ah idd... Voorbeeld 2 is dus gewoon een feature :) Maar wel een beetje dubieus. Die <? en ?> staan wel tussen dubbele quotes, alleen beschouwt de parser [ "<? ] als commentaar, ?> als end delimiter en die laatste dubbele quote en alles erna zou dan dus rechtstreekse output zijn... Verhelderend ;)

[ Voor 37% gewijzigd door Morrar op 15-03-2005 22:10 ]


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11:35
Ik heb codesample 1 als bug gemeld bij PHP.net... Hopelijk is dat terecht. Ik kon in ieder geval geen eerdere bugmelding van iets dergelijks vinden, en volgens mij is het gewoon echt een bug.
Pagina: 1