Possible Duplicate:
Headers already sent by PHP
So I have this output on my page.. not understanding why I have it popping up. I'm new to php though, so maybe it's something easy to fix
-I have a header.php file, which includes all important info, as well has the banner of the page. This header.php is included on every page.
-I have it checking the session value to make sure user is allowed to be at a certain page. If user is not allowed to be there, I kick them back to login page
This is where the error comes up though. This is what I have:
include_once ("header.php");
if ($_SESSION['uid']!='programmer')
{
header('Location: index.php');
echo 'you cannot be here';
exit;
}
The index that it is redirecting to also has the header. So is having these multiple header references giving me this error? I see no other way to do this, and it's driving me nuts!
You cannot use header()
once text has been output to the browser. As your header.php
include presumably outputs HTML, header()
cannot be used.
You can solve this in a couple ways:
header.php
sets the uid session and other vital stuff).ob_start()
at the top of the script to buffer the output.If the header.php file "has the banner", then it is presumably outputting some HTML content to the page.
You can't issue HTTP headers after you have outputted content.
You cannot send any headers after sending any other content. A very likely culprit is extra whitespace after your closing ?>
tag in your header.php. It's generally a good practice to omit the closing tag entirely in any script-only php files.
Your error should tell you exactly what line (and what file) is sending the output.
I ran into a similar error (also seemingly out of nowhere) with respect to a Redirect function which used to be as follows:
function Redirect($url) {
flush(); // Flush the buffer
header("Location: $url"); // Rewrite the header
die;
}
Apparently, you also need to add ob_flush();
to fully flush out the old header. The new function is:
function Redirect($url) {
flush(); // Flush the buffer
ob_flush();
header("Location: $url"); // Rewrite the header
die;
}
Hope this helps someone else having this problem!
Alright, so it's fixed...... not sure how though, maybe somebody can explain why this works all of a sudden.
This is my code:
include_once ("header.php");
if ($_SESSION['uid']!='programmer') {
if(isset($_SESSION['uid'])) {
echo $_SESSION['uid'];
}
header('Location: index.php');
exit;
}
Let me repeat, it all works now! PHP... why do you work now?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With