如何修复PHP中的隐形空间问题?

时间:2009-12-18 15:57:13

标签: php

因此,session_startsetcookie等功能无法成功运行,报告:

  

无法修改标头信息 -   标题已由

发送

但是目标文件是这样的:

1 <?php
2 session_start(); 

如何解决?

书院

我发现了问题,utf-8格式文件在上传到服务器后变成了utf-8 + BOM,所以我暂时通过再次将其保存为utf-8来解决问题。

,还有很多其他文件存在同样的问题,我该如何批量解决问题?

7 个答案:

答案 0 :(得分:7)

闻起来像BOM问题,因为有些编辑没有显示它。尝试使用Notepad ++,Emacs或任何其他显示它的编辑器打开您的文件。如果你在&lt;之前有一些奇怪的角色,你就会有罪魁祸首。

答案 1 :(得分:3)

如果您的文件是Unicode编码的,则在文件的开头添加一个双字节BOM(字节顺序标记)。大多数编辑都不会显示此BOM。例如,在Notepad ++中,您可以将编码更改为不带BOM的UTF-8,或者仅使用完全不同的编码(如ANSI)。

答案 2 :(得分:2)

一个提示是在PHP文件末尾留下尾随?> - 这可以避免在文件末尾有空格的情况。

答案 3 :(得分:1)

只有一种方法可以解决它:找到空间!它在某个地方,它总是在某个地方。

要修复,请尝试three steps in this article

答案 4 :(得分:0)

你可以发布你尝试过的整个程序吗?检查此代码,确保添加了?&gt;在结束

  <?php
session_start();
session_register("count");
if(!isset($_SESSION))
{
    $_SESSION["count"]=0;
    echo "<p>counter initialized</p>\n";
}
else
{
    $_SESSION["count"]++;
}
echo "<p>The counter is now <b> $_SESSION[count]</b></p>";
echo "<p>Reload this page to increment</p>";
?>

答案 5 :(得分:0)

在像vi这样的好编辑器中打开文件,你会看到所有无意义的字符和空格。

如果您发现有问题的字符并且它出现在您的许多文件中,您可以使用grep / xargs / sed立即将其替换为所有文件。不知道你是如何在Windows上那样做的。

关于建议你不要结束的答案?&gt; php标签...我已经多次看到/听过这个建议,但它并不适合我。如果您要从所有文件中省略关闭的php标记,那么您应该在每个文件的末尾添加注释,以指示这一点,以便您知道该文件尚未被截断。

//文件结尾

但是,如果要对所有文件执行此操作,您可能只需删除之后的空格?&gt;标签。除非你对编码很草率,否则真的不是那么难。

答案 6 :(得分:0)

在PHP中启用输出缓冲,这可以在php.ini级别或.htaccess中完成 http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering

然后,所有输出都将缓存在缓冲区中,直到脚本结束,并立即发送。从性能角度来看,这通常很好(因为您的服务器发送更少,更大的数据块)。根据您的站点架构,您可能需要放置flush();在生成HTML标头之后。