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和$