php中的session_start()要放在一个页面的第一行才不发类似Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at 的报警。而在一个页面中类似<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">这样的声明也必须放在页面的第一位样式才会起作用。如果一个页面都必须存在这两段代码的时候就会存在争第一的情况发生,如果把session_start()放在第一位,页面中的样式表全部失效,而如果把<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">放第一位,那就会出现Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at 的报警。请问,这种谁都争第一的情况怎么处理的?

解决方案 »

  1.   

    session前只要别输出就可以
    多余的空行也不行!<?php
    session_start();
    echo "<p>This is a test</p>";
    ?>
    <!DOCTYPE html>
    <html>
    <style>
    p{color:red;}
    </style>
    <body>
    <p>
    wwwwwwweeeeeeeeeeeeeeeeee
    </p>
    </body></html>//echo 跑前面去了,这其实是不好的,应该单把echo提下来,这很容易做到,然后看下源码
    //不拿好像也是可以的了
      

  2.   

    我知道要放前面啊,可我这段代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">也要放前面啊,如果那段代码不放前面我的样式全部丢失了。就是两个都必须放最前面这咋整啊,这难道是PHP的BUG?
      

  3.   

    不会丢失,为啥会丢失了呢,session不输出任何东西,从源码来看,跟没有session一样
      

  4.   

    首先你要解决的是“如果把session_start()放在第一位,页面中的样式表全部失效”这个问题。session_start只是服务器端的一条语句,对页面的样式表没有任何影响,如果有的话也不是session_start的问题。
      

  5.   

    确实是两者有冲突,我也遇到这种情况了,如果开启session下面的样式就没有了,换位置session就不起作用了,lz解决了吗?