2013-02-05 33 views
3

我正在研究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版本5.3.8,Apache 2上,我在AWS上运行suse。

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

+1

@ÁlvaroG.Vicario:在'$ _POST','小部件文本[3] [文字]'缺少,但它是在原'PHP://输入“数据。 –

+0

啊,对不起,该阵列有两个键,其中一个键不见了。 –

+0

没错。PHP似乎踢出任何第三级别的数组键,我试着编辑与检查员的形式,看它是否只是他们的关键“文本”哪些PHP不喜欢,无论如何,它没有工作 –

回答

1

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

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

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

  3. 谷歌搜索显示类似的问题:one,two

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

无论如何,谷歌上搜索一些看起来像这样发生在PHP 5.3.8之后。所以升级可能是另一种选择。

1

啊,只是做:

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

var_dump($result);