ID:               21891
 Comment by:       threedee32 at rogers dot com
 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 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.


Previous Comments:
------------------------------------------------------------------------

[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] [EMAIL PROTECTED]

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

------------------------------------------------------------------------

[2003-01-26 14:39:00] hz11 at nyu dot edu

This is a follow-up to bug #13954.  I'm sorry to open another ticket
for this, however I added some comments, yet didn't see any indication
that they were saved (ie, I didn't get an email confirmation).



I'd like another look at this issue, since the documentation seems to
clash with actual behavior; plus, I think the actual behavior is
peculiar.



Using a CLI compiled 4.3.0 binary, this script:



#!/bin/psh

<?php



$foo = 'Hello';

$bar = 'World';



?>



<?=$foo?>

<?=$bar?>



<?php



echo 'DONE!';



?>



This script will produce:



<empty line>

HelloWorld

DONE![unix prompt]$



Note that there is no trailing space (x20) after <?=$foo?> and
<?=$bar?>  -  only a newline (x0A)



According to
http://www.php.net/manual/en/language.basic-syntax.php#language.basic-syntax.phpmode



"The closing tag for the block will include the immediately trailing
newline if one is present."



Now if I add a x20 after the closing tag, then the newlines are
honored.  Why does this behavior make any sense?  Adding the x20 after
the closing tag is very hackish, especially since the aforementioned
URL has statements like "...because when PHP hits the ?> closing tags,
it simply starts outputting whatever it finds until it hits another
opening tag" throughout.  Obviously, however, this isn't true, since
PHP decides to ignore the newline immediately after the closing tag.



I don't understand why this behavior would be desired anyway; what is
outside the PHP tags should simply be passed through.  And especially
since the docs are misleading about this.



Thank you, and please don't hesitate to request clarification if I'm
not making myself clear.



Hans



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=21891&edit=1

Reply via email to