我有一个奇怪的问题。我最近将我的应用程序从本地xampp安装迁移到SUSE Enterprise Server 11,一切正常,但这一件事让我发疯,我无法找到解决方案。
使用以下语法通过GET或POST传递数组时:
search_dggs.php?latmin[]=52.447529&latmin[]=22&lonmin=17.56&lonmax=22.16
我只得到了latmin的第一个元素。请注意,这只是我在其他需要传递数组的地方发生错误后尝试的一个简单示例。
print_r($_SERVER["QUERY_STRING"]);
输出
latmin[]=52.447529&latmin[]=22&lonmin=17.56&lonmax=22.16
但是
print_r($_GET);
给出
Array
(
[latmin] => Array
(
[0] => 52.447529
)
[lonmin] => 17.56
[lonmax] => 22.16
)
所有POST请求都完全相同。
我正在使用PHP 5.3.8版。 我想问题是一些服务器配置,但我找不到任何关于这个问题。
对评论的回应:
如果我提交任意数量的变量,也会发生同样的情况。
parse_str($_SERVER["QUERY_STRING"]);
print_r($latmin);
给出
Array
(
[0] => 52.447529
)
可以找到php.ini here
您应该能够看到行动here
中的行为这个php文件的源文件是
<?php
$test="latmin[]=52.447529&latmin[]=22&lonmin=23&lonmax=22.16";
parse_str($test);
print_r($latmin);
phpinfo();
?>
答案 0 :(得分:5)
我的系统管理员做了系统更新并重新启动,问题现已解决。没有更改配置文件。
答案 1 :(得分:4)
在我的服务器上测试过它对我来说很好用:
_GET["latmin"]
Array
(
[0] => 52.447529
[1] => 22
)
查看数据处理部分的php.ini,看看它们是什么。将所有内容重置为默认值,重新启动Web服务器并重试。 PHP.ini Data Handling defaults
答案 2 :(得分:2)
link的示例每次都会打印Array ( [0] => 52.447529 )
,即使没有传递任何变量。因此,似乎您在与此代码无关的代码中存在问题:
`
$test="latmin[]=52.447529&latmin[]=22&lonmin=23&lonmax=22.16";
parse_str($test);
print_r($latmin);
phpinfo();
`
答案 3 :(得分:0)
答案 4 :(得分:0)
尝试使用$_REQUEST
代替$_GET
和/或$_POST
答案 5 :(得分:0)
此错误的最可能原因是有人在php.ini中将“max_input_vars”设置为0或1。 “max_input_vars”默认为1000,可以在php.ini中重写。
我最近遇到了不同原因的相同行为 - 有人向后移植到PHP 5.2安装的安全补丁部分实现了“max_input_vars”,但错过了一些重要的部分。不同的原因,相同的结果。
相关的php源代码可以在main / php_variables.c中找到。在php 5.3.8中,橡胶在php_register_variable_ex函数中出现了问题。
有一个SAPI“treat_data”钩子,php在解析字符串时使用,例如“foo = bar&amp; asdf [] = 1&amp; asdf [] = 2” - 不同的SAPI可能有自己的实现。