GET和$

我在Windows计算机上安装了lighttpd web服务器,并且遇到了一个问题:在PHP文件中,没有定义$_GET$_POST变量。

例如,我有这个简单的脚本( tmp.php ):

<?php

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

?>

当我去到地址: http://localhost/tmp.php?x=123

我收到此错误消息:

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

当我将相同的文件放在公共主机上时,我得到:

x: '123'

另外的PHP命令:

empty ($_GET)

返回true。

所有$ _POST变量也是如此。

在我的php.ini文件中是否有任何配置错误?

命令:

print_r($_SERVER); 

给出以下结果:

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 
)

所以x=123的值存在于$_SERVER['QUERY_STRING']$_SERVER['REQUEST_URI'] ,但我不知道如何得到它。


首先,确保我们不会错过任何东西。

尝试这个

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

其次尝试$ _POST

制作一个简单的html表单并尝试发布它。

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

我知道这些听起来很愚蠢,但请尝试一下,这样我们就可以排除它们。

最后是你使用重写规则?

在lighttpd.conf中查看任何提及的'url.rewrite'。 Lighttpd不会像apache那样猜测URL,如果你使用重写,你必须明确地告诉它包含查询字符串。 例如(重要的位以粗体显示 - 将它们添加到您的重写中)。

url.rewrite =(“^ /([az] +)/([az] +) (?*)(。*) ”=>“/index.php?controller= $1& action= $2 & $ 4


根据文档,这可能是由php.ini设置variables_order引起的。

默认值是EGPCS ,但如果它以某种方式更改并且不包含字母G,则GET变量将被完全忽略, $_GET将为空。


据我所知,内容长度为零,它不应该是“零”。 安装fiddler并检查请求期间的头部发送并检查响应头部。 似乎应该有标题搞乱..

问候

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

上一篇: GET and $

下一篇: SQL Parameters and Question Marks