(解释)PHP中为何可以不加?>结束

@Ta 2012-02-25 835点击
我们来看这样一个例子:

inc1.php
<?php
$StartTime=$_SERVER['REQUEST_TIME'];
?>    
       
       

inc2.php
<?php
$StartTime=$_SERVER['REQUEST_TIME'];
           
    

index.php
<?php
include $_REQUEST['do'].'.php';
setcookie('isFunch',true,time() 500);


inc1.php加了?>,并且后面有些空格及回车;inc2.php同样,只不过没加?>。
此时访问xxx.xx/index.php?do=inc1,它会报错,大致内容就是Header已发送,setcookie不行的,而访问xxx.xx/index.php?do=inc2一切正常。
分析原因:如果在?>后存在有空格,回车等字符,PHP输出时会当作HTML输出,导致header, setcookie, session_start等函数执行错误。
回复列表(3|隐藏机器人聊天)
  • @Ta / 2012-02-25 / /
    没说完是咋的?
  • @Ta / 2012-02-25 / /
    啊,你这么理解的啊。
    这个完全不是这样啊。
  • @Ta / 2012-02-25 / /
    哦,我看错了,确实访问index.php include inc1.php时会出错。
    没有用ob_start()(输出缓冲),而且在header前先include了一个文件,而且这个文件还有content输出,这当然会导致header送不出去嘛。这和?>有什么关系??>后面本来就不应该有多余的东西的。(当然不写?>最好)你在inc2.php来个echo或者任何输出内容的函数甚至导致错误提示输出的函数也会导致相同的问题。
    而且你似乎没有解释为什么可以这样。你只说了为什么要这样。与标题不符啊。
添加新回复
回复需要登录