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 正确解析原始数据有任何想法吗?

4

2 回答 2

1

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

  1. 尝试更改配置变量max_input_nesting_level, max_input_vars, max_input_time. 如果您不确定值,请尝试使用默认值。检查PHP 文档页面以查找默认值及其含义。

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

  3. 谷歌搜索揭示了类似的问题:

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

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

于 2013-02-05T16:50:08.287 回答
1

是的,只需这样做:

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

var_dump( $result );
于 2014-02-14T14:57:54.647 回答