无法发送会话缓存限制器 - 没有空格

时间:2014-04-08 18:05:37

标签: php

出现此错误:

  

警告:session_start()[function.session-start]:无法发送会话   缓存限制器 - 已发送的标头(输出始于   /home/apspec/public_html/home.php:105)in   第1行/home/apspec/public_html/login.php

我做了一些搜索,但没有看到任何空格。我的会话开始在第1行。我想我曾经有过这个错误,服务器上的东西正在增加一个空格。有没有办法检查是否是这种情况?还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

打扮jeoroen的评论:

仅仅因为您可能在文件开头写了<?php session_start();,并不一定意味着它是脚本的开头!如您的错误所示,您的输出从home.php开始在第105行。也许您在那里有一些标题内容,然后您调用include login.php;来开始会话内容。

虽然&#34;没有什么必须在它之前出现&#34;是一个很好的经验法则,更准确的规则是&#34;脚本不能在它之前发送输出&#34;。就个人而言,我session_start()深入调用了两层包含的文件,即使它在第60行附近(制作游戏意味着我有很多初始代码!)但输出直到所有代码之后才开始已经运行了 - 事实上,在我的最新项目中,最后一行代码是$template->output();,这个函数可以完成迄今为止所做的所有工作,并在所需的所有HTML中进行修饰。

最后一点实际上非常重要。许多人,尤其是经验丰富的程序员,都会强调分层的重要性。最简单的方法是使用外部CSS和JS文件,而不是在HTML中内嵌内容,将内容与样式和功能分开。这同样适用于PHP。理想情况下,您应该避免在代码中毫不犹豫地输出HTML,而是代码应该完成所需的所有处理,然后在最后输出。

Smarty是一个广泛使用的引擎,但在我之前提到的那个项目中$template->output()只创建一个干净的函数范围,导入准备好的数据,并调用require $file.".tpl.php";以便我可以进行一些最终的后期处理。我认为这比安装整个第三方引擎更容易:p我......我对其他人编写的代码有信任问题。几年前,我在phpBB中丢失了数十亿字节的论坛帖子...... -shivers -

无论如何,希望这漫无边际的帮助!