php:// input中的数据不等于解析并放在$ _POST中的数据

时间:2013-02-05 15:08:02

标签: php environment-variables

我正在研究Wordpress中的这个奇怪的错误,我不知道wordpress是如何工作的,但我跑了一个小时试图找出问题,看看问题的根源来自哪里。

原来问题是这个东西没有更新,因为$ _POST没有被请求的数据。

在我从浏览器访问的文件的顶部,在任何其他代码之前,我执行了以下操作:

echo file_get_contents("php://input");
print_r($_POST); exit();

我看到wordpress使用$ _POST作为一个全能的全局并写入它。我想也许wordpress会把数据踢出去,但我找不到。在任何其他事情发生之前,这仍然是文件的顶部..我认为甚至不可能在此之前修改变量

该输出是

widget-text%5B3%5D%5Btitle%5D=Test&widget-text%5B3%5D%5Btext%5D=THISISATEST&sidebar=sidebar-1&sidebar-1_position=1&sidebar-2_position=&sidebar-3_position=&sidebar-4_position=&sidebar-5_position=&savewidget=Save+Widget&widget-id=text-3&id_base=text&multi_number=3&_wpnonce=36852083b6&_wp_http_referer=%2Fwp-admin%2Fwidgets.php%3Fmessage%3D0%26editwidget%3Dtext-3%26sidebar%3Dsidebar-1%26key%3D0
Array
(
    [widget-text] => Array
        (
            [3] => Array
                (
                    [title] => Test
                )

        )

    [sidebar] => sidebar-1
    [sidebar-1_position] => 1
    [sidebar-2_position] => 
    [sidebar-3_position] => 
    [sidebar-4_position] => 
    [sidebar-5_position] => 
    [savewidget] => Save Widget
    [widget-id] => text-3
    [id_base] => text
    [multi_number] => 3
    [_wpnonce] => 36852083b6
    [_wp_http_referer] => /wp-admin/widgets.php?message=0&editwidget=text-3&sidebar=sidebar-1&key=0
)

url_decoded:

widget-text[3][title]=Test&widget-text[3][text]=THISISATEST&sidebar=sidebar-1&sidebar-1_position=1&sidebar-2_position=&sidebar-3_position=&sidebar-4_position=&sidebar-5_position=&savewidget=Save Widget&widget-id=text-3&id_base=text&multi_number=3&_wpnonce=36852083b6&_wp_http_referer=/wp-admin/widgets.php?message=0&editwidget=text-3&sidebar=sidebar-1&key=0Array

请注意原始数据中widget-text[3][text]=THISISATEST的存在方式。但$_POST['widget-text']['3']['text']未定义。

我查看了phpinfo,找不到任何相关设置。我使用的是PHP Version 5.3.8,Apache 2,我在AWS上运行suse。

有没有人对如何让$ _POST正确解析原始数据有任何想法?

2 个答案:

答案 0 :(得分:1)

这确实很奇怪。可能是PHP中的错误或配置/扩展问题。

  1. 尝试更改配置变量max_input_nesting_levelmax_input_varsmax_input_time。如果您不确定值,请尝试使用默认值。检查PHP documentation page以查找默认值及其含义。

  2. 如果您正在运行suhosin扩展程序,请尝试禁用它,看看它是否有帮助。此外,所有suhosin.post.* configuration keys看起来都很有趣。

  3. 谷歌搜索显示类似的问题:onetwo

  4. 尝试通过$_REQUEST - $_REQUEST['widget-text']['3']['text']

  5. 访问它

    无论如何,经过一些谷歌搜索后,似乎这种情况发生在PHP 5.3.8中。因此升级可能是另一种选择。

答案 1 :(得分:1)

是的,只是这样做:

parse_str( urldecode( file_get_contents("php://input") ), $result );

var_dump( $result );