8

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

?>
4

6 回答 6

5

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

于 2012-04-12T14:48:55.167 回答
4

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

_GET["latmin"]  

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

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

于 2012-04-09T17:26:23.357 回答
2

每次甚至没有传递变量时,链接上的一个示例都会打印出来。Array ( [0] => 52.447529 )因此,似乎您在未与此代码链接的代码中遇到问题:`

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

`

于 2012-04-12T08:21:22.283 回答
0

尝试$_REQUEST代替$_GET和/或$_POST

于 2012-04-15T18:03:10.007 回答
0

嗯..也许它与那个严重的漏洞错误有某种关系?您的 XAMPP 是否具有与生产相同的 PHP 版本?我知道如果您发布太多数据(文件/帖子大小和参数数量),可能会出现类似问题。升级到 5.3.10 怎么样?

于 2012-04-11T10:08:22.397 回答
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 函数中出现了。

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

于 2012-05-03T23:58:10.317 回答