通过阵列失去所有,但第一要素(Passed arrays lose all but first el

2019-06-23 09:51发布

我有一个奇怪的问题。 我最近迁移我的应用程序从我的本地的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中,可以发现这里

你应该能够看到的行为在行动这里

这个PHP文件的源文件

<?php

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

?>

Answer 1:

那么我的系统管理进行了系统更新并重新启动,现在的问题是固定的。 没有配置文件修改。



Answer 2:

测试了我的服务器上,它为我工作得很好:

_GET["latmin"]  

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

看在数据处理部分你的php.ini,看看这些值。 重置一切默认情况下,重新启动Web服务器,然后再试一次。 php.ini中数据处理违约



Answer 3:

在一个例子链路打印Array ( [0] => 52.447529 )每次连没有变量被传递。 所以,看来你有没有这个代码链接代码问题:`

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

`



Answer 4:

嗯..也许它在某种程度上与该严重漏洞的bug ? 请问您的XAMPP具有相同的PHP版本的生产? 我知道,如果你发布太多的数据(无论是在文件/后尺寸和param数量方面)可能存在类似的问题。 如何升级到5.3.10?



Answer 5:

尝试$_REQUEST而非$_GET和/或$_POST



Answer 6:

这个错误的最可能的原因是有人在php.ini中设置“max_input_vars”为0或1。 “max_input_vars”默认为1000,并且可以在php.ini被覆盖。

最近,我遇到了同样的行为有不同的原因 - 一个安全补丁有人回迁到一个PHP 5.2的安装部分实施“max_input_vars”,但错过了一些重要的位。 不同的原因,相同的结果。

相关的PHP的源代码可以在主/ php_variables.c找到。 在PHP 5.3.8,橡胶被击中的php_register_variable_ex功能的道路。

有分析如字符串时PHP使用SAPI“treat_data”钩子“富=酒吧和航空自卫队[] = 1&ASDF [] = 2” - 一个不同的SAPI可能有它自己的实现这一点。



文章来源: Passed arrays lose all but first element