views:

786

answers:

4

Hi guys,

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

+3  A: 

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()

Soufiane Hassou
I know that and thats why I have made an echo before the header()-call. It makes an error at other servers and should do this. Why doesn't anything happen?
Industrial
A: 

Do you have short tags enabled? try it with the long tag <?php:

<?php
error_reporting(E_ALL);
//echo 'This is an error';

header("Location: login.php");
die();
?>
jah
Yep, I do have short tags set enabled, and everything else works fine, except the header stuff...
Industrial
A: 

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!

Industrial
+1  A: 

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.

Col. Shrapnel
Hi. I'm afraid not. Display_errors are enabled as said, but it was the xDebug that caused this... Thanks a lot for your help Col.!
Industrial