#21891 [Opn]: Closing PHP tag and Newlines Revisted

From: Date: Mon, 08 Mar 2004 16:29:39 +0000
Subject: #21891 [Opn]: Closing PHP tag and Newlines Revisted
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-56111@lists.php.net to get a copy of this message
ID: 21891 User updated by: hz11 at nyu dot edu Reported By: hz11 at nyu dot edu Status: Open Bug Type: Feature/Change Request Operating System: FreeBSD/Linux PHP Version: 4.3.0 New Comment: I agree. Now that the CLI interface has matured it's in fairly widespread use. I use CLI continually and this "feature" is a royal pain. Perhaps when running in CLI mode this behavior could be automatically disabled... this would be a much appreciated change. Or, a special tag as suggested: <?+ <?- I would think putting something like this into PHP 5 wouldn't disrupt things. Previous Comments: ------------------------------------------------------------------------ [2004-02-20 02:41:33] threedee32 at rogers dot com I think it would be useful to have the option to negate this feature, perhaps with a modified end tag (\?> or something?). That way it would still be backwards-compatible. ------------------------------------------------------------------------ [2003-05-20 15:34:06] csnyder at chxo dot com "Included files shouldn't even contain a closing tag, for these exact reasons." This is excellent advice, but it is *not* a documented practice. All of the examples in the Basic Syntax documentation include closing tags. In fact, the documentation for include() says: "... any code inside the target file which should be executed as PHP code must be enclosed within valid PHP start and end tags." I agree wholeheartedly that both the documentation and the behavior should be changed, but to do so is to risk breaking a lot of existing code. ------------------------------------------------------------------------ [2003-05-07 08:30:43] hz11 at nyu dot edu I very much would like this reconsidered, for a number of reasons, including documentation and functionality. Granted, the documentation does say "will include," but in combination with other statements it's simply not clear. If this behavior is vital that it must remain, perhaps another look at this would avoid others opening bug reports. More importantly, however, is the fact that this behavior occurs at all. Yes, PHP is primarily a web scripting language, but even in this vein of usage, there's no reason for this. First, included files generally don't contain trailing newlines. For example, in your text editor of choice, going to the end of the document, placing the cursor directly after ?> and deleting everything to the right, you will not end up with any trailing newlines. So, is this behavior in place to simply allow one newline, but not more than one? Simply, there either is a character after the closing tag, or there isn't. Secondly, and most importantly, is that this shouldn't even be an issue. Included files shouldn't even contain a closing tag, for these exact reasons. PHP will end parsing at an end-of-file and placing a closing tag will only cause problems with header() calls, etc. as pointed out. Lastly, if this behavior is vital enough to keep, I hope that a consideration for CLI usage can be made. Ambigously keeping a newline after a closing tag makes even less sense on the console. At the very least, if PHP is compiled as a CLI, can this behavior can be eliminated? Thank you, Hans ------------------------------------------------------------------------ [2003-05-02 05:32:46] goba@php.net IMHO the docs are not misleading. The doc says: "The closing tag for the block will include the immediately trailing newline if one is present." Note the words "will include". After this, the docs says (what you also quoted): "This works as expected, because when PHP hits the ?> closing tags, it simply starts outputting whatever it finds until it hits another opening tag." Which is perfectly OK, if you read again the text above. The closing ?> includes the trailing newline. So everything after the closing ?> is output (not including the trailing newline, as it is included in the closing tag itself). Why this makes sense? PHP is a web scripting language (or it is fucused on web scripting). Conside that you have an include file "common.inc", and it is closed with a PHP closing tag ?>. You include this file from some index.php expecting it to provide some defined functions, and output a header() in index.php before doing anything. You won't succeed in outputting the header() if the newline after the ?> closing tag is treated as output, as there would be some output, and then headers cannot be sent. This is the expected behaviour, it won't be changed I can assure you, and it is documented. The docs says "...the closing tag includes the newline..." and "...after the closing tag...", this implies that "...after the newline if it is present after ?>..." isn't it? ------------------------------------------------------------------------ [2003-05-02 05:09:39] gk at proliberty dot com This is not a documentation problem; the documentation actually says TWICE that this should NOT be happening. Here's the second place: >This works as expected, because when PHP hits the ?> closing tags, it simply starts outputting whatever it finds until it hits another opening tag This bug involving LOSS OF DATA. That is serious IMHO; second only to crashes. I have reproduced this in PHP 4.3.2-RC (cli) (built: Apr 25 2003 18:03:38) and also in apache module. -- a simpler example script: line1 <?php ?> line2 -- output: line1 line2 ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/21891 -- Edit this bug report at http://bugs.php.net/?id=21891&edit=1

« previous php.bugs (#56111) next »