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.
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**" )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With