了解缓存限制器|标题已经发送php警告

时间:2013-10-08 17:52:56

标签: php mysql session header connect

我的网站运行正常,但只需刷新主页面(index_3.php),我的错误日志会填充两个警告。

[08-Oct-2013 11:36:09] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home2/mysite/public_html/mysubsite/index_3.php:7) in /home2/mysite/public_html/mysubsite/functions.php on line 12

[08-Oct-2013 11:36:09] PHP Warning:  session_regenerate_id() [<a href='function.session-regenerate-id'>function.session-regenerate-id</a>]: Cannot regenerate session id - headers already sent in /home2/mysite/public_html/mysubsite/functions.php on line 13

我已经进行了足够的研究,以了解在会话开始之前有什么东西正在发送页面数据,但我似乎无法根除原因。 functions.php直接来自本教程网站“创建PHP函数”。 http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL

同样在index_3.php上加载的是get_opwire.php,它只是放置一个表。 get_opwire.php的开头看起来像:

<?php
include 'db_connect.php';
include 'functions.php';
sec_session_start();

sec_session_start();是位于functions.php

中的自定义会话开始

当我尝试将sec_session的顺序重新排列到顶部或移动桌子周围的那些时。 Index_3.php只是主页面,主要是包含提交表单的html和get_opwire.php

有人能帮我指出问题吗?

编辑:index_3.php(从第1行到第1行)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"/>
 <meta name="Generator" content="Xara HTML filter v.6.0.1.335"/>
 <meta name="XAR Files" content="index_htm_files/xr_files.txt"/>
 <title>index_3</title>
 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
 <link rel="stylesheet" type="text/css" href="index_htm_files/xr_main.css"/>
 <link rel="stylesheet" type="text/css" href="index_htm_files/xr_text.css"/>
 <link rel="stylesheet" type="text/css" href="index_htm_files/custom_styles.css"/>
 <script type="text/javascript" src="index_htm_files/roe.js"></script>
 <!--[if IE]><script type="text/javascript" src="index_htm_files/prs.js"></script><![endif]--><!--[if !IE]>--><script type="text/javascript" src="index_htm_files/prs3.js"></script><!--<![endif]-->
 <script type="text/javascript">var xr_nextpage=""; var xr_transition=0; var xr_transitiontime=0;var xr_prevpage="index_2.htm"; var xr_btransition=0; var xr_btransitiontime=500;</script>
 <style type="text/css">.xr_pbd {position: absolute; border:none; left: 50%; margin-left: -380px;}</style>
</head>

编辑2:在index_3.php中的某个地方

<html>
<body>
<div style="width:  480px;  height:  175px;  overflow:  auto;">
<?php include 'get_opwire.php'; ?>
</div>
</body>
</html> 

2 个答案:

答案 0 :(得分:1)

尝试从所有包含的php文件中删除结束?>标记。

答案 1 :(得分:0)

在会话开始和会话重新生成id之前的某个地方会在页面上放置一些内容。如果您确定没有回显或打印任何页面,那么它可能是其中一个文件顶部的空白区域。

编辑1

由于编码,某些文本编辑器/文字处理器会在顶部保存带有额外不可见字符的文件。尝试将文件文本复制并粘贴到纯文本编辑器或推荐用于编码的文本编辑器(如Notepad ++)中的新文件中。

编辑2

所以,那些是最可能的解决方案....它说

output started at /home2/mysite/public_html/mysubsite/index_3.php:7

这意味着它是index_3.php的第7行,其中输出开始于。可能存在空间或可能存在某种导致输出发送的错误。

如果你真的找不到那个不可见的输出,你可以使用ob_start等缓冲来捕获所有输出。在会话开始之前放置ob_start并稍后使用ob_end_flush来显示页面。但这并不能解决你在不知情的情况下发送输出的事实。

编辑3:“无输出”包括任何和所有HTML。

如果任何文件中的某些内容不在PHP括号内?&lt;?php?&gt;那很重要。 index_3.php文件以HTML开头。这是输出。你必须先做get_opwire.php。

编辑4

关于get_opwire.php如何同时具有页面启动内容和表格打印输出,这是一个为什么将显示代码与功能代码分开的好例子。您有三种选择:

  1. 有单独的文件。您将拥有一个像page_start.php这样的文件,它包含您在index_3.php顶部包含的session_start,以及一个像display_table.php这样的文件,它显示您包含表格的表格。
  2. 将表格转换为函数。你可以将表输出包装在一个函数中,在index_3.php的最顶部包含get_opwire.php,然后在你想要表的地方调用该函数。
  3. 使用输出缓冲。输出缓冲捕获打印出来的东西,以便您以后可以使用它。它会是这样的:
  4. index_3.php的顶部:

     ob_start();
     include get_opwire.php;
     $table = ob_get_contents();
     ob_end_clean();
    

    表格如下:

     echo $table;