【发布时间】:2012-02-03 16:23:14
【问题描述】:
我在我的 Windows 计算机上安装了 lighttpd 网络服务器,但我遇到了一个问题:在 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)
返回真。
对于所有 $_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'] 中,但我不知道如何获取它。
【问题讨论】:
-
通知说未定义的索引是'a',而不是'x'。你确定代码是一样的吗?
-
是的,它是 x 或您定义的任何其他变量。 $_GET 和 $_POST 数组根本不存在。
-
设置是否正确?
print_r($_SERVER);对 GET 请求说什么? -
也许可以试试 $_REQUEST, $_P, $_G .. 也可以试试
var_dump($_SERVER);看看查询字符串是否出现在变量中 -
@AndreyRubliov 你在 lighttpd 和 PHP 之间使用 CGI 还是 FastCGI?你的 lighttpd.conf 文件是什么样的?