Friday 10 November 2017

php - Warning: Cannot modify header information - headers already sent by ERROR






Possible
Duplicate:

href="https://stackoverflow.com/questions/8028957/headers-already-sent-by-php">Headers
already sent by
PHP






I've
been struggling with this error for a while
now.




To start with, I just thought it
was white space, but after further research I think it might be a problem similar to
this:




Look for any
statements that could send output to the user before this header statement. If you find
one or more, change your code to move the header statement before them. Complex
conditional statements may complicate the issue, but they may also help solve the
problem. Consider a conditional expression at the top of the PHP script that determines
the header value as early as possible and sets it
there.




I'm
guessing the include header is causing the problem along with the header(), but I'm not
sure how to rearrange the code to get rid of this
error.



How do I remove the
error?





$username = $password = $token = $fName = "";

include_once
'header.php';

if (isset($_POST['username']) &&
isset($_POST['password']))
$username =
sanitizeString($_POST['username']);

$password =
sanitizeString($_POST['password']); //Set temporary username and password
variables
$token = md5("$password"); //Encrypt temporary
password


if ($username != 'admin')

{
header("Location:summary.php");
}
elseif($username ==
'admin')
{
header("Location:admin.php");
}

elseif($username == '')

{

header("Location:index.php");
}
else
die
("

Invalid username or
password.

");

if ($username ==
"" || $token == "")
{
echo " class='container'>

Please enter your username and
password

";
}


else
{
$query = "SELECT * FROM members WHERE
username='$username'AND password = '$token'"; //Look in table for username
entered
$result = mysql_query($query);
if (!$result)

die ("Database access failed: " . mysql_error());
elseif
(mysql_num_rows($result) > 0)
{
$row =
mysql_fetch_row($result);
$_SESSION['username'] = $username; //Set session
variables

$_SESSION['password'] = $token;


$fName = $row[0];
}

}
?>

class="post-text" itemprop="text">
class="normal">Answer



The
long-term answer is that all output from your PHP scripts should be buffered in
variables. This includes headers and body output. Then at the end of your scripts do any
output you need.




The very quick fix
for your problem will be to
add



ob_start();


as
the very first thing in your script, if you only need it in this one script. If you need
it in all your scripts add it as the very first thing in your header.php
file.



This turns on PHP's output buffering
feature. In PHP when you output something (do an echo or print) it has to send the HTTP
headers at that time. If you turn on output buffering you can output in the script but
PHP doesn't have to send the headers until the buffer is flushed. If you turn it on and
don't turn it off PHP will automatically flush everything in the buffer after the script
finishes running. There really is no harm in just turning it on in almost all cases and
could give you a small performance increase under some
configurations.



If you have access to change
your php.ini configuration file you can find and change or add the
following




output_buffering
= On


This will turn
output buffering out without the need to call
ob_start().



To find out more about output
buffering check out rel="noreferrer">http://php.net/manual/en/book.outcontrol.php



No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...