Php 会话_start()后跟导致错误的标头()

Php 会话_start()后跟导致错误的标头(),php,Php,我在一个名为via Ajax的PHP文件中有以下代码(注意-该代码是实际代码的剥离版本,但仍会产生错误): <?php session_start(); $response = array( 'status'=>'abc', 'a'=>'abc', 'b'=>'abc', 'c'=>'abc' ); header('X-JSON: '.json_encode($resp

我在一个名为via Ajax的PHP文件中有以下代码(注意-该代码是实际代码的剥离版本,但仍会产生错误):

<?php
    session_start();
    $response = array(
        'status'=>'abc',
        'a'=>'abc',
        'b'=>'abc',
        'c'=>'abc'
    );

    header('X-JSON: '.json_encode($response));
    exit;

在开口之前绝对没有空间或任何东西 然而,当我调用脚本时,我得到:

[11-Aug-2009 14:56:13]PHP公告:A 会议已经开始- 忽略中的会话\u start() \第2行的test\action.php

[11-Aug-2009 14:56:13]PHP警告: 无法修改标题信息- 标题已由(输出)发送 从中的\test\action.php:2)开始 \第10行的test\action.php

第2行是session_start()命令,第10行是header()命令


所以PHP告诉我它忽略了会话启动,然后立即告诉我该行实际生成了输出……发生了什么事?

可能与此有关。

好吧,信不信由你,犯罪输出是

'[11-Aug-2009 14:56:13] PHP Notice: A session had already been started - ignoring session_start() in \test\action.php on line 2

抑制错误消息(开发中的坏主意)或查找会话的开始位置(这正是解决此问题的真正方法)

使用ob_start();

检查是否存在称为BOM(字节顺序标记)的恼人小错误在你的文件中爬行。如果你已经将该文件编码为utf-8,并且你可以用firebug(例如)捕获它,这是可能的。

Gah-是的,你是对的。FWIW我在两个不同的PHP项目上工作,其中一个有自动启动的会话,而这个没有。我没有更改我的PHP.ini,所以流氓错误正在输出。问题是由于它是一个ajax请求,所以错误并不明显。