This is my first question here, and I will try to follow all the advice I received when I signed up…
My problem is the ‘headers sent’ error when trying to do a PHP redirect.
I have this tiny script to test a redirect:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >
</head>
<body>
<?php
if (isset($_POST['go']) && $_POST['go'] == 'go') {
$redirectURL = 'test1.php';
header( 'Location: ' . $redirectURL ) ;
exit();
}
echo '<p>This is Page 1. We will test a redirect. Type in \'go\' and hit submit:</p><br><br>';
echo '<form name="test" method="post" action="' . $_SERVER['PHP_SELF'] . '">';
echo '<input type="text" name="go">';
echo '<input type="submit" name="submit">';
echo '</form>';
?>
</body>
</html>
It redirects fine when run on a Windows server, but on an Apache it gives the error:
Warning: Cannot modify header information – headers already sent by (output started at /home/simply92/public_html/test/testUTF.php:7) in /home/simply92/public_html/test/testUTF.php on line 10
Line 7 is the php tag.
I used my web host’s code editor to save with encoding ISO-8859-1 (which should get any BOMs out of the equation, right?) and I set the default charset in php.ini to ISO-8859-1 as well (in case that matters.)
One strange thing is that it redirects even on the Apache when I delete doctype and everthing else up to the php tag and have my very first line in the script be <?php. Obviously that can not be the solution.
So my question is: How could I find out WHAT is being sent before my header() call, and then, how could I get rid of it?
Hopefully someone can point me in the right direction!
Thanks in advance.
PHP’s header requires that the output buffer is free from any other data. The headers must be set before the doctype, head and body tags printed. This should work