header()函数后加上
exit
()函数。例如下面的错误写法,在两个 php 代码段之间有一个空行:
代码如下:
//some code here
?>
//这里应该是一个空行
header(”http/1.1 403 Forbidden”);
exit
();
?>
原因是:PHP
脚本开始执行 时,它可以同时发送 http 消息头部(标题)信息和主体信息. http
消息头部(
来自 header()
或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中.
这样就可以允许你修改标题信息,包括缺省的标题(
例如 Content-Type 标题).但是,一旦脚
本发送了任何非标题的输出(例如,
使用 HTML
或
() 调用),那么 PHP 就必须先发送完
所有的 Header,
然后终止 HTTP header.而后继续发送主体数据.从这时开始,任何添加或修改
Header 信息的试图都是不允许的,并会发送上述的错误消息之一。
解决办法:
修改 php.ini 打开缓存(output_buffering),或者在程序中使用缓存函数
ob_start(),ob_end_flush()等。原理是:output_buffering 被启用时,在脚本发送输出时,PHP
并不发送 HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只
能在 PHP 4.0 中使用,它具有中央化的输出机制)。你仍然可以修改/添加 header,或者设
置 cookie,因为 header 实际上并没有发送。当全部脚本终止时,PHP 将自动发送 HTTP
header 到浏览器,然后再发送输出缓冲中的内容。
=================================================================
PHP 手册实例应用
1:您可以使用 heder
命令,强制使浏览器使用新鲜的内容(无缓存) 。
也可以给网址增加了一个唯一的编号,使其每次都读取新的内容,避免缓存。
example:
代码如下:
<?
"<img src="cs.jpg" mce_src="cs.jpg">";
//通常读取的是缓存文件
?>
<?
"<img src="cs.jpg?".time()."" mce_src="cs.jpg?".time()."">";
//增加了唯一的编号,使浏
览器重新请求
w
//print "<img src="cs.jpg?".rand(100,999)."" mce_src="cs.jpg?".rand(100,999)."">";
?>
2: 下面是个很好的函数,将图片传送给浏览器显示。
代码如下: