php session_start头已经发送编码utf-8问题

时间:2013-06-17 08:06:09

标签: php session error-handling

我遇到以下错误,而在session_start函数之前没有输出任何内容:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /xyz_path/index.php:1) in /xyz_path/index.php on line 2

代码如下:

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>Application Jersey</title>

我也试过这段代码,错误也一样,但会话ID可用:

<?php
if(!session_start()){
    session_start();
}
echo session_id();
?>

4 个答案:

答案 0 :(得分:2)

错误说它发生在第2行,其中表示要么

  • 顶部有空行或
  • 发送了一个隐形字符

如果是第二个,请确保将代码编辑器中的文件编码更改为名称中没有BOM的任何内容。

某些编辑器在UTF(8,16)编码文件的开头添加BOM字节。

答案 1 :(得分:0)

试试这段代码:

<?php 
ob_start(); // add this line
session_start(); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>Application Jersey</title>

这适合我。

答案 2 :(得分:0)

在linux上你可以使用命令:

cat -A 'filename'  

cat -A 'filename' | less  

它会显示

M-oM-;M-?<?php$

答案 3 :(得分:-2)

尝试使用以下代码

<?php session_start(); ob_start(); ?>

用上面的代码替换代码的第一行。