Why Can"t I Get Apache to Post?

Why Can"t I Get Apache to Post?

am 25.07.2007 22:13:34 von kvnsmnsn

I don't know if this is the right newsgroup to post this in, but I
couldn't find one that looked better, so here goes.

My company has a bunch of PHP files that are currently working on one
of our machines with webserver Apache. We moved those files over to
my local machine with webserver Apache. When I take my browser to the
URL corresponding to my machine I get a login prompt asking me for my
username and password. The PHP code gets executed to a place that
says:

if ( $_SERVER[ "REQUEST_METHOD" ] == "POST" ) {
// Redirect user depending upon login
if( $User->login( $txtUsername, $txtPassword ) ) {
if ( $User->simple_interface == "1")
header ("Location: simple_interface.php");
else
header( "Location: view_list.php" );
} else {
header
( "Location: .." . $domain
. ($_GET[ "gid" ] ? "?gid=".$_GET[ "gid" ] : "" ));
} // end if
} else if( isset( $lfu ) && isset( $lfp ) ) {
// Redirect user depending upon login
if( $User->login( $lfu, $lfp ) ) {
if ( $User->simple_interface == "1")
header ("Location: simple_interface.php");
else
header( "Location: view_list.php" );
} else {
header
( "Location: .." . $domain
. ($_GET[ "gid" ] ? "?gid=".$_GET[ "gid" ] : "" ));
} // end if
} // end if

What happens on the machine where this code is working is that
<$_SERVER[ "REQUEST_METHOD" ]> evaluates to "POST" so the first branch
of the outer statement gets executed, and the user is logged in.
But on the machine with Apache installed
<$_SERVER[ "REQUEST_METHOD" ]> evaluates to "GET", and one of or
are undefined, so none of this code gets executed at all.

Does anyone on this newsgroup know why Apache doesn't post at this
point? Can Apache handle server side variables? Is there a chance
that that's what's messing me up? Am I providing enough information
to answer these questions, or do I need to say more?

What's really confusing me is that both webservers are Apache. The
only differences between the "httpd.conf" files for the two machines
is the groups of ... sections down at
the bottom of each.

---Kevin Simonson

"You'll never get to heaven, or even to LA,
if you don't believe there's a way."
from _Why Not_

Re: Why Can"t I Get Apache to Post?

am 26.07.2007 10:16:34 von colin.mckinnon

On 25 Jul, 21:13, kvnsm...@hotmail.com wrote:
> I don't know if this is the right newsgroup to post this in, but I
> couldn't find one that looked better, so here goes.
>
> My company has a bunch of PHP files that are currently working on one
> of our machines with webserver Apache. We moved those files over to
> my local machine with webserver Apache. When I take my browser to the
> URL corresponding to my machine I get a login prompt asking me for my
> username and password. The PHP code gets executed to a place that
> says:
>
> if ( $_SERVER[ "REQUEST_METHOD" ] == "POST" ) {
> // Redirect user depending upon login

> } // end if
>
> What happens on the machine where this code is working is that
> <$_SERVER[ "REQUEST_METHOD" ]> evaluates to "POST" so the first branch
> of the outer statement gets executed, and the user is logged in.
> But on the machine with Apache installed
> <$_SERVER[ "REQUEST_METHOD" ]> evaluates to "GET", and one of or
> are undefined, so none of this code gets executed at all.

Using the request method as part of the input parameters is badly
conceived to begin with.

Multiplexing pages using redirection is badly conceived too. I'm not a
fan of front controller architecture but its a better solution than
this. I would only use redirection to handle exceptions (e.g. user not
authenticated).

A cople of things to note:

header(Location:...

under HTTP/1.1 the URL must not be relative, although it works for
most browsers. In PHP this also changes the status oif the response to
302 - but it should be 307, but again it works for most browsers.

When you do a redirect the new location is fetched via a GET, not a
POST.

Depending on how your system is set up, fetching a URL which points to
a default page (e.g. index.php) without a trailing directory delimiter
in the path will cause a redirection response - e.g. posting to
http://example.com/stuff will cause a redict to http://example.com/stuff/

I suspect that the above is enough to start working out what is
happenning - but I think you need to look at your code and application
architecture more than your webserver config.

C.