最近作东西涉及到header及一些http协议之间的东西,重新看了下php手册(绝对是个好东西),更明白了一些东西,记下先,可能还会补充:


手册摘入:

header
发送一个原始 HTTP 标头 (PHP 3, PHP 4, PHP 5)
void header ( string string [, bool replace [, int http_response_code]] )

具体各参数就看php手册了,说得很详细,这次我用到的是header("Location: http://ovliverlin.cnblogs.com");这个功能,这样实现跳转在单独空白页面是没问题的,但是如果不是手册所说得情况“要记住 header() 必须在任何实际输出之前调用,不论是来自普通的 HTML 标记,空行或者 PHP。”就会产生header already sented的错误提示,且不会执行跳转,在web端可以使用<script>location.href = "abc.php"</script>代替,但是如果无法实现js的wap端呢?而或必须使用header的情况呢?这样可以使用缓存来解决。手册中引用“可以在代码中使用 ob_start()ob_end_flush() 来实现这样的功能,或者通过修改 php.ini 中的 output_buffering 配置选项来实现,也可以通过修改服务器配置文件来实现。
如下:
ob_start();
<html>
<head></head>
<body>
.....
<?php
header("Location: http://ovliverlin.cnblogs.com");
?>
</body>
</html>

手册中的ob_start()解释是:
This function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in an internal buffer
也就是它可以缓存所有的页面内容(除header)标头,即:这样就使得header优先于其他输出。

这种用法有个注意:
注意:

Microsoft Internet Explorer 4.01 中的一个漏洞使得该机制无法正常工作,无解决方案。在 Microsoft Internet Explorer 5.5 中也有个漏洞影响到这一点,升级到 Service Pack 2 或更高版本可以解决。


posted on 2007-10-19 17:30  林宁  阅读(334)  评论(0编辑  收藏  举报