Saturday 1 February 2014

Reference - What does this error mean in PHP?

Warning: Cannot modify header information - headers already sent

Happens when your script tries to send a HTTP header to the client but there already was output before, which resulted in headers to be already sent to the client.
This is an E_WARNING and it will not stop the script.
A typical example would be a template file like this:
<html>
<?php session_start(); ?>
<head><title>My Page</title>
</html>
...
The session_start() function will try to send headers with the session cookie to the client. But PHP already sent headers when it wrote the <html> element to the output stream. You'd have to move the session_start() to the top.
You can solve this by going through the lines before the code triggering the Warning and check where it outputs. Move any header sending code before that code.
An often overlooked output is new lines after PHP's closing ?>. Good practise is to omit them when they are the last thing in the file. Likewise, another common cause for this warning when your code is all PHP, is when the starting <?php have an empty space or line before it, causing the webserver to send the headers and the whitespace/newline thus when PHP starts parsing won't be able to submit any header.
If your file has more than one block in it, you should not have any spaces in between them. (Note: You might have multiple blocks if you had code that was automatically constructed)
Also make sure you don't have any Byte Order Marks in your code, for example when the encoding of the script is UTF-8 with BOM.
Related questions:
share|improve this answer

2  
Probably a good idea to add a note about UTF-8 BOM. –  luiscubal Oct 7 '12 at 16:23
4  
@luiscubal click "edit" and write the note :-) –  Jocelyn Oct 7 '12 at 16:37
 
If you are using WordPress, check the theme files. When I upgraded a site to a new version of WordPress, I was unable to update the theme because it has not been updated in several years. This problem cropped up. It turned out that the functions.php file had more than one <? ?> block with spaces in between. –  Roy Leban Mar 31 '13 at 8:41
 
@RoyLeban "If your file has more than one block in it..." I'm not sure what this means. What is a "block"? Would one block consist of <?php ?> and so "more than one block" would be <?php ?> <?php ?>? –  Andrew Fox 2 days ago

0 comments:

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More