"Cannot modify header information"的解决方法

林继 PHP 技术 4,449 共写了1875个字 (2006-12-18 22:03:43) 没有评论 打印 扫描二维码 百度已收录


If you got this message: “Warning: Cannot modify header information – headers already sent by ….”
如果在执行php程序时看到这条警告:”Warning: Cannot modify header information – headers already sent by ….”

Few notes based on the following user posts:

1. Blank lines (空白行):
Make sure no blank line after of the calling php script.
检查有 后面没有空白行,特别是include或者require的文件。不少问题是这些空白行导致的。

2. Use exit statement (用exit来解决):
Use exit after header statement seems to help some people
header (“Location: xxx”);

3. PHP has this annoying problem, if your HTML goes before any PHP code or any header modification before redirecting to certain page, it'll said “Warning: Cannot modify header information – headers already sent by ….” Basically anytime you output to browser, the header is set and cannot be modified.  So two ways to get around the problem:

3a. Use Javascript (用Javascript来解决):
self.location(\”file.php\”);“; ?>
Since it's a script, it won't modify the header until execution of Javascript.
可以用Javascript来代替header。但是上面的这段代码我没有执行成功… 另外需要注意,采用这种方法需要浏览器支持Javascript.

3b. Use output buffering (用输出缓存来解决):

… HTML codes …
… PHP codes …
header (“Location: ….”);
This will save the output buffer on server and not output to browser yet, which means you can modify the header all you want until the ob_end_flush() statement.  This method is cleaner than the Javascript since Javascript method assumes the browser has Javascript turn on.  However, there are overhead to store output buffer on server before output, but with modern hardware I would imagine it won't be that big of deal.  Javascript solution would be better if you know for sure your user has Javascript turn on on their browser.


4.set output_buffering = On in php.ini (开启php.ini中的output_buffering )
set output_buffering = On will enable output buffering for all files. But this method may slow down your php output. The performance of this method depends on which Web server you're working with, and what kind of scripts you're using.



电子邮件地址不会被公开。 必填项已用*标注

< >