Welcome to bytea
当前位置: Home 学习资料 网站制作 "Cannot modify header information"的解决方法 今天是...date...

登录bbs

用户名
密码

bytea统计

Members : 43193
Content : 333
Web Links : 69
"Cannot modify header information"的解决方法 PDF Print E-mail
Saturday, 21 January 2006 08:00

昨晚在转换许愿板编码的时候,有一个页面需要在head中申明utf-8的编码,但是这与程序中的一处header产生了冲突。google了一下,找到几种解决方法,翻译整理一下:

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 <?php ... ?> of the calling php script.
检查有<?php ... ?> 后面没有空白行,特别是include或者require的文件。不少问题是这些空白行导致的。

2. Use exit statement (用exit来解决):
Use exit after header statement seems to help some people
在header后加上exit();
header ("Location: xxx");
exit();

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

3b. Use output buffering (用输出缓存来解决):
<?php ob_start(); ?>
... HTML codes ...
<?php
... PHP codes ...
header ("Location: ....");
ob_end_flush();
?>
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.

就像上面的代码那样,这种方法在生成页面的时候缓存,这样就允许在输出head之后再输出header了。本站的许愿板就是采用这种方法解决的header问题。

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.
这种方法和3b的方法理论上是一样的。但是这种方法开启了所有php程序的输出缓存,这样做可能影响php执行效率,这取决于服务器的性能和代码的复杂度。

Comments (4)Add Comment
关于那个JS的方法
written by zhang20084, March 05, 2006
你没有写对当然不可以了
注意引号中的引号要用单引好
例:
report abuse
vote down
vote up
Votes: +0
...
written by zhang20084, March 05, 2006
report abuse
vote down
vote up
Votes: -1
...
written by zhang20084, March 05, 2006
晕,回复的代码发不上去。
report abuse
vote down
vote up
Votes: -1
...
written by zijie, March 11, 2006
是吗?
我没注意,但是我用的是\"阿,应该不会有问题吧?

可以到论坛发帖讨论一下,欢迎阿
report abuse
vote down
vote up
Votes: +0

Write comment
quote
bold
italicize
underline
strike
url
image
quote
quote
smile
wink
laugh
grin
angry
sad
shocked
cool
tongue
kiss
cry
smaller | bigger

security code
Write the displayed characters


busy
 

支持本站:


相关文章


Connect with me via QQ:38074 or e-mail:

©2006 bytea.net All Copyrights Reserved.

本站备案编号:保密^_^

RSS:  

开启背景音乐