8.18. Eliminating “headers already sent” Errors
Problem
You are trying to send a
HTTP header or cookie using header( )
or setcookie( )
,
but PHP reports a
“headers already
sent” error message.
Solution
This error happens when you send nonheader output before calling
header( )
or setcookie( )
.
Rewrite your code so any output happens after sending headers:
// good setcookie("name", $name); print "Hello $name!"; // bad print "Hello $name!"; setcookie("name", $name); // good <?php setcookie("name",$name); ?> <html><title>Hello</title>
Discussion
An HTTP message has a header and a body, which are sent to the client
in that order. Once you begin sending the body, you
can’t send any more headers. So, if you call
setcookie( )
after printing some HTML, PHP
can’t send the appropriate Cookie
header.
Also, remove trailing whitespace in any
include files. When you include a file
with blank lines outside <?php ?>
tags, the
blank lines are sent to the browser. Use trim( )
to
remove leading and trailing blank lines from files:
$file = '/path/to/file.php'; // backup copy($file, "$file.bak") or die("Can't copy $file: $php_errormsg); // read and trim $contents = trim(join('',file($file))); // write $fh = fopen($file, 'w') or die("Can't open $file for writing: $php_errormsg); if (-1 == fwrite($fh, $contents)) { die("Can't write to $file: $php_errormsg); } fclose($fh) or die("Can't close $file: $php_errormsg);
Instead of processing files on a one-by-one basis, it may be more convenient to do so on a ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.