首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php://input中的数据与解析后放入$_POST的数据不相等

php://input中的数据与解析后放入$_POST的数据不相等
EN

Stack Overflow用户
提问于 2013-02-05 23:08:02
回答 2查看 306关注 0票数 3

我正在解决Wordpress中的这个奇怪的bug,我不知道wordpress是如何工作的,但我跑了一个小时试图隔离这个问题,看看问题的根源是从哪里来的。

事实证明,问题是因为$_POST没有请求的数据,所以东西没有更新。

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

代码语言:javascript
复制
echo file_get_contents("php://input");
print_r($_POST); exit();

我看到wordpress使用$_POST作为一个通用的全局变量,并对其进行写操作。我想也许wordpress会把数据踢出某个地方,但我找不到。无论如何,这是在文件的顶部,在任何其他事情发生之前。我甚至不认为在此之前修改变量是可能的

其输出结果是

代码语言:javascript
复制
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:

代码语言:javascript
复制
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版本5.3.8,Apache 2,我在AWS上运行的是suse。

有没有人知道如何让$_POST正确解析原始数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-06 00:50:08

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

  1. 尝试更改配置变量max_input_nesting_levelmax_input_varsmax_input_time。如果你不确定这些值,那就试试默认的值。检查PHP documentation page以查找默认值和它们的含义。
  2. 如果您正在运行suhosin扩展,请尝试禁用它,看看它是否有帮助。此外,所有通过interesting.
  3. Googling - $_REQUEST['widget-text']['3']['text']

访问two.

  • Try的onesuhosin.post.* configuration keys look都会出现类似的问题

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-14 22:57:55

是的,你只需要做:

代码语言:javascript
复制
parse_str( urldecode( file_get_contents("php://input") ), $result );

var_dump( $result );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14710608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档