Php 传递的数组将丢失除第一个元素以外的所有元素

Php 传递的数组将丢失除第一个元素以外的所有元素,php,arrays,post,get,Php,Arrays,Post,Get,我有一个奇怪的问题。我最近将我的应用程序从本地xampp安装迁移到SUSE Enterprise Server 11,一切正常,但这件事让我抓狂,我找不到解决方案 使用以下语法通过GET或POST传递数组时: search_dggs.php?latmin[]=52.447529&latmin[]=22&lonmin=17.56&lonmax=22.16 我只得到latmin的第一个元素。请注意,这只是我在其他需要传递数组的地方发生错误后尝试的一个简单示例 print_r

我有一个奇怪的问题。我最近将我的应用程序从本地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
但是

给予

所有POST请求都会发生完全相同的情况

我使用的是PHP版本5.3.8。 我想问题出在服务器配置上,但我找不到关于这个问题的任何信息

对评论的答复:

如果我提交任意数量的变量,也会发生同样的情况

parse_str($_SERVER["QUERY_STRING"]);
print_r($latmin);
给予

Array
(
    [0] => 52.447529
)
可以找到php.ini

你应该能够看到行动中的行为

此php文件的源文件是

<?php

    $test="latmin[]=52.447529&latmin[]=22&lonmin=23&lonmax=22.16";
    parse_str($test);
    print_r($latmin);
    phpinfo();

?>

在我的服务器上进行了测试,对我来说效果很好:

_GET["latmin"]  

Array
(
    [0] => 52.447529
    [1] => 22
)

查看数据处理部分中的php.ini,看看值是什么。将所有内容重置为默认值,重新启动Web服务器并重试

嗯。。也许与此有关?您的XAMPP是否具有与产品相同的PHP版本?我知道如果发布太多数据(无论是文件/发布大小还是参数数量),可能会出现类似的问题。升级到5.3.10怎么样?

每次即使没有传递变量,也会在prints
数组([0]=>52.447529)上显示一个示例。因此,似乎您在与此代码未链接的代码中遇到了问题:
`

`

我的系统管理员进行了系统更新并重新启动,现在问题已经解决。没有更改任何配置文件。

请尝试
$\u REQUEST
而不是
$\u GET
和/或
$\u POST
此错误最有可能的原因是有人在php.ini中将“max\u input\u vars”设置为0或1。 “max_input_vars”默认值为1000,可以在php.ini中重写

我最近遇到了同样的行为,但原因不同——有人将一个安全补丁移植到PHP5.2安装中,部分实现了“max_input_vars”,但遗漏了一些重要内容。不同的原因,相同的结果

相关的php源代码可以在main/php_variables.c中找到。在PHP5.3.8中,橡胶在php_register_variable_ex函数中碰到了问题


php在解析诸如“foo=bar&asdf[]=1&asdf[]=2”之类的字符串时使用了一个SAPI“treat_data”钩子——不同的SAPI可能有自己的实现。

我在本地添加了相同的问题,但从来没有弄清楚是什么导致了它(在windows 7上是Zend Server 5.5)。你能检查一下你的url是否没有&;而不是&打印什么(parse_str($_SERVER[“QUERY_STRING”]);给你?你的代码在我的服务器上运行得很好。也许这就是“全球注册”的问题?你能在这里发布你的php.ini配置吗?我编辑了原始的帖子来处理评论。我知道代码是正确的,它也可以在我本地的XAMPP安装上运行,但不能在新服务器上运行。如果我没有找到解决方案,我会重新安装,并希望这种行为会消失,但如果能知道这样的事情是如何发生的,那就太好了。奇怪的是parse_str也给出了错误的输出。我的php.ini发布在上面,我在数据处理部分没有发现任何异常。我们可以确定这不是一个php.ini问题,因为我已经使用了您的确切php.ini并得到了正确的结果(一个数组中有两个Latmin)。运行phpinfo();然后将get参数传递到页面,并告诉我它在底部的_get部分显示了什么。您好,是的,我的本地安装与它不工作的SUSE Enterprise Server版本相同。所以我不认为它是特定于版本的,而是一些奇怪的配置问题。如果找不到解决方案,我将很快升级或重新安装。这是因为我测试了parse_str方法,它应该打印一个2元素数组,但是没有。传递的变量包含在phpinfo()的末尾;但这可能不是很清楚。系统更新有时包括PHP更新和其他各种好东西。你可能永远不知道是什么把它修好了!在我看来,配置也不错。您可能正在运行一个有缺陷的PHP版本。
<?php

    $test="latmin[]=52.447529&latmin[]=22&lonmin=23&lonmax=22.16";
    parse_str($test);
    print_r($latmin);
    phpinfo();

?>
_GET["latmin"]  

Array
(
    [0] => 52.447529
    [1] => 22
)
$test="latmin[]=52.447529&latmin[]=22&lonmin=23&lonmax=22.16";
parse_str($test);
print_r($latmin);
phpinfo();