-1

可能重复:
PHP 已发送的标头

我正在尝试访问我网站的 SESSION 保护区内的 DOMPDF(将 HTML 转换为 PDF 的脚本)。

SESSION 包含用户信息,当您单击按钮时,页面会刷新并以 pdf 格式下载该页面。这在我笔记本电脑上的开发服务器上运行良好。但在网上它说标头已经发送。

我打印了下面的标题并将其追溯到我的会话。是不是一初始化就发送 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"
}
4

4 回答 4

1

在向用户发送任何内容之前,您必须启动会话。您可以使用输出缓冲区(ob_*函数,如thisthis)来防止在脚本不应该这样做时发送任何内容。

于 2012-07-25T15:50:31.197 回答
0

有很多事情会导致这种情况,但最有可能发生的是,在发送标头之前,您在不知情的情况下将一些空白打印到屏幕上。

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

于 2012-07-25T15:49:28.807 回答
0

启动会话不会发送标头,但它会尝试设置需要与标头一起发送的 cookie。您可能在向浏览器输出某些内容后调用 session_start() 。

于 2012-07-25T15:50:49.667 回答
0

答案可能在session_start() 的 PHP 文档中

如果您收到如下错误:

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

...或者...

“警告:session_start();[function.session-start]:无法发送会话缓存限制器 - 标头已发送”。

...确保 session_start(); 甚至在任何 DOCTYPE 声明之前,实际上都位于脚本的最顶部,例如:

...

于 2012-07-25T15:52:17.997 回答