2012-07-25 97 views
-1

可能重复:
Headers already sent by PHPPHP会话头已经发出已

我试图访问DOMPDF我的网站的SESSION保护区域内(即转换HTML到PDF的脚本) 。

SESSION包含用户信息,当您单击按钮时,页面将刷新并以PDF格式下载该页面。这在我的笔记本电脑上的开发服务器上正常工作。但它在线说头已经发送。

我打印了下面的标题,并将其追溯到我的SESSION。是否这样,只要你初始化一个SESSION标题被发送?

array(3) { 
    [0]=> string(38) "Expires: Thu, 19 Nov 1981 08:52:00 GMT" 
    [1]=> string(77) "Cache-Control: no-store, no-cache, must-revalidate,post-check=0, pre-check=0" 
    [2]=> string(16) "Pragma: no-cache" 
} 
+1

这并不意味着会话头已发送。这意味着输出已经开始(即脚本已经在网页上打印了某些内容),并且服务器必须已经发送标题,所以不能再修改它们。 **错误消息告诉你输出已经开始,在那里开始你的调试。** – JJJ 2012-07-25 15:49:19

+1

你是否在freehoster中托管你的项目?他们有时会发送一些广告,你会得到这样的错误。 – nkr 2012-07-25 15:49:35

回答

1

你必须开始会话之前你发送任何东西给用户。 您可以使用输出缓冲区(ob_*函数,如thisthis)来防止脚本不应该发送任何内容。

0

有许多事情可以导致此,但什么是最有可能发生的是,你必须被打印到屏幕上一些空白不知情的情况下之前发送的报头。

从脚本末尾删除任何不必要的close-php标记(?>)。这应该有所帮助(并且是最佳做法)。

0

开始会话不会发送标题,但它会尝试设置需要与标题一起发送的cookie。您可能在已经向浏览器输出内容之后调用session_start()。

0

答案可能在于PHP documentation for session_start()

如果您收到类似的错误:

错误警告:在session_start()[function.session开始]:“无法发送 会话cookie - 头已经(输出开始发...... “

......或者......

” 警告:在session_start(); [function.session启动]:不能发送 会话缓存限制器 - 标头已发送“。

... 确保session_start();简直是在你的 脚本的最顶端,甚至在任何DOCTYPE声明,如:

...