Re: Is header() malfunction due to PHP5.3.3 -> 5.4.11 transition?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9 Feb 2013, at 19:00, Jonathan Eagle <jeofva@xxxxxxxxxxxxx> wrote:

> I'm having a problem with a very straightforward routine; one that works
> in one PHP installation but not on the other. The only difference that I
> can see between the working version and the non-working version is that
> the one that doesn't work is running on the later version of PHP. The
> following basic log-in routine works fine on my personal development
> server, running PHP 5.3.3, but doesn't work on the production server,
> hosted by 1&1.com that is running PHP 5.4.11.
> 
> <?php
> require_once('../includes/initialize.php');  //<== $session object
>                                               init'd and set to false
> 
> if(!$session->is_logged_in())
> {
>        header("Location: login.php");
>        exit;
> }
> ?>
> 
> login.php is in the same directory as the file that has this code at the
> very top of the file.
> 
> Everything works as expected right up to the 'exit;' line.
>      * $session->is_logged_in() is false
>      * when tested immediately after the 'header("Loc...)' statement,
>           'headers_sent()' reports true.
>      * no error messages result (like: 'header already sent', etc.)
> 
> Instead of the program flow moving to 'login.php', the URL indicates
> that the destination is the original file, except that the file is empty
> - zero bytes.  I've tried accessing the routine via three different
> computers, all running different MS operating systems from XP to Win7
> and they all behave identically.  The behavior is also consistent
> between browsers (i.e., FireFox, Chrome, and Windows Explorer).
> 
> I also did a $_SERVER variable dump immediately before and after the
> 'header(...' line, expecting to see a difference in at least one of the
> 'REDIRECT_*' elements, but both outputs where identical with the
> exception that the $_SERVER ouput after the header statement was
> executed was missing the following line:
> 
>      ["HTTP_CACHE_CONTROL"]=> "max-age=0"
> 
> It doesn't look relevant to me, but I include it to be thorough.
> 
> I looked through the PHP changelog pages, but I don't see mention of the
> problem (of course, that might just be due to my ignorance).  The ISP
> for the production version of PHP indicated that I should come here for
> help, so here I am.
> 
> Can anyone shed some light as to what is (or might be) going on?
> 
> Any help or guidance that can be offered will be greatly appreciated.


Check the output buffering settings. You say no errors are displayed, but are you sure that errors are set to be displayed?

You mention the headers_sent() result immediately after the header() function call is true. If the header() function call had worked it would not be true, it would be false. You have output being sent to the client before that header() function call.

-Stuart

-- 
Stuart Dallas
3ft9 Ltd
http://3ft9.com/

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux