在php官方文档中,曾经指出最好不要再结尾添加?>结束标记。但我们编程的习惯和使用的ide都会为我
们自动建立php结束标记?>。这个标记使用在正常情况下是不影响程序的运行的。尤其在早期的php4中,这种
标记使用不当也不会影响最后的输出。但我最近遇到了php脚本结束标记照成页面无法显示的问题。
首先wap最终的输出时xml文件,如果xml文件格式有问题,则无法显示结果。在多次检查输出过程发现并没有
问题,同样的代码再另一台测试机上显示也无问题。通过firebug查看,最终的输出
主 要原因,通过firebug分析,可以发现在输出xml之前出现了空行,这个空行照成xml输出不正常,找遍所有原文件并没有任何输出空行或者类似功能语 句。使用ob_clean逐行调试,发现在其中一个文件加载后,输出出现了空行,最终发现是由于那个php文件结尾?>后有两行空行。将空行去掉, 问题解决输出正常。
究其原因,在网上搜索了相关资料,codeigniter开发规范给出如下解释:
php闭合标签“?>” 在php中对php的分析器是可选的。 但是,如果使用闭合标签,任何由开发者,用户,或者ftp应用程序插入闭合标签后面的空格都有可能会引起多余的输出、php错误、之后的输出无法显示、空 白页。因此,所有的php文件应该省略这个php闭合标签,并插入一段注释来标明这是文件的底部并定位这个文件在这个应用的相对路径。这样有利于你确定这 个文件已经结束而不是被删节的。
// 错误的写法 incorrect
<?php echo "here's my code!"; ?>
// 正确的写法 correct:
<?php echo "here's my code!";
demo:
test.php
<?php
header("content-type:text/xml");
include_once('sys_common.php');
echo'<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title><![cdata[测试]]></title>
<link><![cdata[http://baidu.com]]></link>
<description><![cdata[测试空行输出]]></description>
<language><![cdata[zh-cn]]></language>
<pubdate><![cdata[18.11.2016 14:54:02]]></pubdate>
<lastbuilddate><![cdata[18.11.2016 14:54:02]]></lastbuilddate>
</channel>
</rss>';
// exit;
需要引入的系统文件sys_common.php
<?php
// do someing
// 注意:后边这个闭合标签需要去掉,这样上边引入的时候输出xml就不会出错了。
// ?>
ok,找到引入文件,去掉闭合标签的就ok!
