标头已在CakePHP应用程序中发送错误

时间:2010-06-21 01:01:25

标签: php cakephp header

            function new_photo()
            {

                if( !empty($this->data))
                {
                        $this->data['Photo']['showcase_id'] = $this->Session->read('CurrShowcase.id');
                        $this->data['Photo']['added'] = date("Y-m-d H:i:s");
                        $this->Showcase->Photo->save($this->data);

                        $flasher = 'Photo uploaded successfully';
                        $flasher .= '<br/><img src="' . $this->data['Photo']['thumbnail_url'] . '"/>';
                        $this->Session->setFlash($flasher);
                        //$this->redirect(array('action'=>'sc',));
                }
            }   

我的CakePHP应用程序中有一个Showcase Controller,还有一个新的照片表单来提交新照片。每当我取消注释保存数据后重定向的最后一行时,我都会收到此错误:

Warning (2): Cannot modify header information - headers already
sent by (output started at D:\.....

即使我收到此错误,$ this-&gt;数据仍会在数据库中正确保存。但是,如果我如上所示评论重定向行,一切正常并且没有错误。 我已经检查了标签周围的空白区域,所以我很确定不是这样。

有什么想法吗?

编辑: 注释掉setFlash语句并不能解决问题。

6 个答案:

答案 0 :(得分:3)

将调试模式更改为0,以确保在重定向之前不会生成通知/警告。此外,您可能希望收紧处理部分(变得偏执)并确保它不使用无效索引,以及整个应用程序流中的任何其他位置以确保您没有获得任何输出(如果它将调试更改为0时可以正常工作。

答案 1 :(得分:1)

在某处你没有向我们展示调试声明吗?

答案 2 :(得分:1)

你可能会遇到一个看不见的UTF-8 BOM字符。检查文本编辑器设置是否使用BOM保存文件。

答案 3 :(得分:1)

我会检查模型中的空白区域。他们中的任何人。那是我遇到的陷阱之一。

答案 4 :(得分:0)

我假设setFlash会向浏览器输出内容吗?

如果你的&lt;?php?&gt;之前或之后有空格标签不是你的问题你可能不得不尝试为setFlash()的'layout'参数传递'null';

$this->Session->setFlash($flasher, null); 

答案 5 :(得分:0)

此代码向浏览器输出内容,或者在文件末尾(或任何其他包含文件)?>之后有空格。空白被发送给用户,从而发送http头。