PHP 4.0 Bug #3077 Updated: ASP tags aren't recognized

From: Date: Sat, 06 Jan 2001 06:12:20 +0000
Subject: PHP 4.0 Bug #3077 Updated: ASP tags aren't recognized
Groups: php.dev 
Request: Send a blank email to php-dev+get-43131@lists.php.net to get a copy of this message
ID: 3077 Updated by: cynic Reported By: djm@web.us.uu.net Old-Status: Open Status: Feedback Bug Type: Scripting Engine problem Assigned To: Comments: Previous Comments: --------------------------------------------------------------------------- [2000-10-18 19:16:49] djm@web.us.uu.net This is partly fixed in 4.0.3pl1. ASP tags are recognized, but they still don't work with single-line comments. You still need to apply the patch I submitted for the "eat one line comments" line of the lexer. All it does is replace "?" with "[?%]" in the regexp so that it works for <% as well as <?. Of course, if you have asp_tags off, you might not want that to happen... I'm not sure what's best in that case. Here is a valid PHP script that gets a parse error from 4.0.3pl1. <html><head><title>comments test</title></head> <body> <hr> <?php echo("Hash comments workn"); $variable="blah"; # never mind this stuff ?> <?= $variable; # This is a shortcut for "<?echo .." ?> <p> <% echo ("You may optionally use ASP-style tags"); $variable = "boo"; %> <% echo (" (if they work)"); # this should be ignored also %> <%= $variable; # This is a shortcut for "<%echo .." %> <hr> <? phpinfo() ?> </body> </html> --------------------------------------------------------------------------- [2000-06-06 21:33:07] andi@cvs.php.net This should be fixed in the latest CVS. Please grab it or in about 24 hours get the latest snapshot from snaps.php.net --------------------------------------------------------------------------- [1999-12-31 21:30:01] djm@web.us.uu.net Ok, I have a workaround, and a related bug fix. I think the first time I missed an occurrence of asp_tags in zend-scanner.l. This time I did a global search and replace, and ASP tags started working. phpinfo() still shows that I set the asp_tags flag On, so I don't understand why this made a difference. Once I got that working, I found a clearer bug: the scanner doesn't support one-line comments in ASP tags. Even though they're shown in the ASP tags example at http://www.php.net/manual/language.basic-syntax.php3 Here are the changes I made to get it working: --- zend-scanner.l 1999/12/30 22:31:18 1.1.1.2 +++ zend-scanner.l 2000/01/01 02:24:16 @@ -1031,7 +1031,7 @@ <INITIAL>"<%="|"<?=" { - if ((yytext[1]=='%' && CG(asp_tags)) + if ((yytext[1]=='%' && CG(short_tags)) || (yytext[1]=='?' && CG(short_tags))) { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; @@ -1048,7 +1048,7 @@ <INITIAL>"<%" { - if (CG(asp_tags)) { + if (CG(short_tags)) { zendlval->value.str.val = yytext; /* no copying - intentional */ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; @@ -1111,7 +1111,7 @@ } -<ST_IN_SCRIPTING>([#]|"//")([^nr?]|"?"[^>nr])*("?n"|"?rn")? { /* eat one line comments */ +<ST_IN_SCRIPTING>([#]|"//")([^nr?%]|[?%][^>nr])*([?%]"n"|[?%]"rn")? { /* eat one line comments */ HANDLE_NEWLINE(yytext[yyleng-1]); return T_COMMENT; } @@ -1151,7 +1151,7 @@ zendlval->value.str.len = yyleng; zendlval->type = IS_STRING; HANDLE_NEWLINES(yytext,yyleng); - if (CG(asp_tags)) { + if (CG(short_tags)) { BEGIN(INITIAL); return T_CLOSE_TAG; /* implicit ';' at php-end tag */ } else { --------------------------------------------------------------------------- [1999-12-31 20:36:34] djm@web.us.uu.net I'm having a lex-related problem. I compiled PHP4.0b3 as a DSO in apache 1.3.9. ASP-style tags and the code in them are displayed in the browser instead of being parsed, even though the httpd.conf contains php_flag asp_tags On phpinfo() confirms that the Local Value of asp_tags flag is On. All of the other tags styles are parsed correctly, but stuff like <% echo ("You may optionally use ASP-style tags"); $variable = "boo"; %> <%= $variable; # This is a shortcut for "<%echo .." %> gets sent verbatim to the browser. I've looked through zend-scanner.l and can't find anything wrong. I tried removing the conditionals on asp_tags there, and changing the <% and %> to <@ and @> in that file and in my PHP script to see if % was causing trouble, but neither of those approaches worked. I also tried removing optimization when compiling zend-scanner.c. No effect. This is weird. I was able to confirm that I was getting my changed scanner by breaking the rules for identifying the short SGML tags. I found that there's a missing dependency because I had to rm libzend/libzend.la in order to force the php module to be rebuilt after the scanner changed. I'm using PHP compiled as a DSO with apache 1.3.9. Compiled using flex version 2.5.4 and gcc 2.7.2.1. --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=3077

« previous php.dev (#43131) next »