Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

$_GET and $_POST variables do not exist when using lighttpd web server

I installed lighttpd web server on my Windows computer and I have a problem: in PHP files no $_GET and $_POST variables are defined.

For example I have this simple script (tmp.php):

<?php

  echo "x: '" . $_GET ['x'] . "'<br />";

?>

When I go to the address: http://localhost/tmp.php?x=123

I get this error message:

Notice: Undefined index: x in /srv/www/htdocs/tmp.php on line 3 x: ''

Whilst when I put the same file on public hosting I get:

x: '123'

Also the php command:

empty ($_GET)

returns true.

The same is for all $_POST variables.

Is there any misconfiguration in my php.ini file?

The command:

print_r($_SERVER); 

gives the following result:

Array (
 [SERVER_SOFTWARE] => lighttpd/1.4.20
 [SERVER_NAME] => localhost
 [GATEWAY_INTERFACE] => CGI/1.1
 [SERVER_PROTOCOL] => HTTP/1.1
 [SERVER_PORT] => 80
 [SERVER_ADDR] => 0.0.0.0
 [REQUEST_METHOD] => GET
 [REDIRECT_STATUS] => 200
 [QUERY_STRING] => x=123
 [REQUEST_URI] => /tmp.php?x=123
 [REMOTE_ADDR] => 127.0.0.1
 [REMOTE_PORT] => 3150
 [CONTENT_LENGTH] => 0
 [SCRIPT_FILENAME] => /srv/www/htdocs/tmp.php
 [SCRIPT_NAME] => /srv/www/htdocs/tmp.php
 [DOCUMENT_ROOT] =>
 [SYSTEMROOT] => C:\WINNT
 [HTTP_ACCEPT] => */*
 [HTTP_ACCEPT_LANGUAGE] => en-gb
 [HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)
 [HTTP_ACCEPT_ENCODING] => gzip, deflate
 [HTTP_HOST] => localhost
 [HTTP_CONNECTION] => Keep-Alive
 [WINDIR] => C:\WINNT
 [PHP_SELF] => /srv/www/htdocs/tmp.php
 [PATH_TRANSLATED] => /srv/www/htdocs/tmp.php
 [REQUEST_TIME] => 1328287189
 [argv] => Array (
 [0] => /srv/www/htdocs/tmp.php )
 [argc] => 1 
)

So the value x=123 exists in $_SERVER['QUERY_STRING'] and in $_SERVER['REQUEST_URI'], but I don't know how to get it.

like image 424
Andrey Rubliov Avatar asked Feb 03 '12 16:02

Andrey Rubliov


1 Answers

Firstly lets make sure we're not missing something.

Try this

<?php
    // test1.php
    print('GET: '); // First missing semicolon
    print_r($_GET);
    print('HTTP_GET_VARS: '); // Second missing semicolon
    print_r($HTTP_GET_VARS);
?>

Secondly try $_POST

Make a simple html form and try to post it.

<?php
    // test2.php
    print_r($_POST);
?>
<form method="POST">
    <input type="text" name="myvar" />
    <input type="submit""/>
</form>

I know these sound silly, but please try them so we can rule them out.

Finally are you using rewrite rules?

Take a look in lighttpd.conf for any mention of 'url.rewrite'. Lighttpd doesn't try to guess the URL like apache, you have to specifically tell it to include the query string if your using rewrites. For example (The important bits are in bold - add them to your rewrites).

url.rewrite = ( "^/([a-z]+)/([a-z]+)(?*)(.*)" => "/index.php?controller=$1&action=$2&**$4**" )

like image 198
Kinetic Avatar answered Nov 15 '22 08:11

Kinetic