需要先调用session_start()

时间:2012-04-12 03:31:54

标签: session doctype

为了修复IE9错误,我必须在页面顶部放置'DOCTYPE'声明:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <?php
     require_once 'navBar.php';
 ?>

通过将DOCTYPE放在文件的顶部,我修复了一个IE9'错误。'

IE9中的'bug'是 - 文件顶部没有DOCTYPE - 任何具有内联块样式的div都会忽略内联块样式并且会垂直堆叠。

我在页面上有3个div,内联块样式,在Firefox和Android浏览器中,带有内联块的3个div显示在一行,水平从左到右。

但在IE9中,我不得不将DOCTYPE添加为第1行(不是第2行,而不是在顶部的php部分之后 - DOCTYPE必须是第1行)。

然后IE9才会遵循内联块样式。

问题是 - 在navbar.php里面我调用session_start()。

如您所知,在发送任何浏览器输出之前,session_start()也必须是第1行。 否则你会得到一个errmsg。像这样:

  Warning: session_start() [function.session-start]: Cannot send 
  session cache limiter - headers already sent (output started at 
  /homepages/42/d329883313/htdocs/ourSite/landing_page.php:2) in 
  /homepages/42/d329883313/htdocs/ourSite/navBar.php on line 1

(ps我的IDE将文件保存为UTF-8,因此BOM不是问题。我已经检查过了 - 在DOCTYPE结束和session_start开始之间的任何地方都没有额外的空格(由于DOCTYPE向浏览器发送内容,session_start()正在中断。)

我的问题:

如何保留我的内联块和DOCTYPE以及session_start()?

简单的UI风格的功能是两个'必须在线1'是很糟糕的 代码元素相互对立(DOCTYPE和session_start)。

1 个答案:

答案 0 :(得分:0)

解决方案是从require_once'somefile.php';

切换

require_once( 'somefile.php');

尽管Firefox和Android浏览器在第一种风格中表现不错,但是IE9有一个怪癖:它会忽略div的内联块样式。