PHP header location-redirect doesn't work - why? [duplicate]
Here's my file. I want to make it redirect, but nothing happens. To check out what is going on, I added an echo before the header part.
It neither throws an error or redirect to index.php. What is wrong? I have turned output buffering on/off, but nothing makes it redirect. What can I do?
<?
error_reporting(E_ALL);
echo 'This is an error';
header("Location: login.php");
die();
?>
Thanks
From PHP documentation :
header()
must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP.
And in your case, you are using echo
before header()
I reminded myself that I had xDebug installed on the actual test environment and after googling it, I found this site: http://bugs.xdebug.org/view.php?id=532
So I'll downloaded the last version of xDebug and changed the php.ini accordingly for the new file and everything works out like a charm. Headers are being sent - the redirecetion is done and errors are displayed.
Thanks everybody for your help!
Do you have short tags enabled?
try it with the long tag <?php
:
<?php
error_reporting(E_ALL);
header("Location: login.php");
die();
?>
Is display_errors enabled?
@Gumbo - It sure is!
well, it sure is not. because
To check out what is going on, I added an echo before the header part.
if you'd have display_errors enabled, it would display an error, at least when you turned output buffering on
.
So, first of all make sure you can see error messages.
just print out an undefined variable,
error_reporting(E_ALL);
echo $undef9306;
I am sure you won't see it. So, you have to turn displaying errors on
Next, on the server side you can use headers_sent()
function to see if headers were sent. On client side use HTTP sniffer to see if anything were sent
And check your file for the BOM.
精彩评论