GET and $

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 = ( "^/([az]+)/([az]+) (?*)(.*) " => "/index.php?controller=$1&action=$2& $4 )


According to the docs, this could be caused by the php.ini setting variables_order .

The default value is EGPCS , but if it was changed somehow and did not contain the letter G, GET variables would be completely ignored and $_GET would be empty.


Well as far I see content length is zero, it shouldn't be "zero". Install fiddler and check for the header send during request and check for response header. It seems that there should be header messing around..

Regards

链接地址: http://www.djcxy.com/p/10428.html

上一篇: HttpUtility.HtmlEncode转义过多?

下一篇: GET和$