PHP中可以修改HTTP header的几个函数如下:
header /header_remove
session_start/session_regenerate_id
setcookie/setrawcookie
如果在使用上面函数时出现了
Warning: Cannot modify header information - headers already sent (output started at script:line)
根本原因就是应该在output输出之前才可以修改header。什么是output 输出之前呢?有意无意的时候可以产生输出:
不知情的发生:
特意产生输出:
HTTP协议中header 信息必须在page/output之前。PHP首先把header信息传给web server, 而且是一次性完成的,双分行符结束。如:
HTTP/1.1 200 OK Powered-By: PHP/5.3.7 Vary: Accept-Encoding Content-Type: text/html; charset=utf-8 <html><head><title>PHP page output page</title></head> <body><h1>Content</h1> <p>Some more output follows...</p> and <a href="/"> <img src=internal-icon-delayed> </a>
当PHP收到第一个output(print, echo,<html>)时,它将flush所有收集的header.这之后就不可以再发送header信息了。
常见的错误代码有:
<html>
<?php session_start(); ?>
<head><title>My Page</title>
</html>
...
<?php // 在 "<?php"之前多了一个空格 ?>
<?php echo "hello world" setcookie('username',"supprman",time()-3600); ?>