我正在解决Wordpress中的这个奇怪的bug,我不知道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正确解析原始数据?
发布于 2013-02-06 00:50:08
这确实很奇怪。可能是PHP中的错误或配置/扩展的问题。
max_input_nesting_level、max_input_vars和max_input_time。如果你不确定这些值,那就试试默认的值。检查PHP documentation page以查找默认值和它们的含义。suhosin扩展,请尝试禁用它,看看它是否有帮助。此外,所有通过interesting.$_REQUEST['widget-text']['3']['text']访问two.
suhosin.post.* configuration keys look都会出现类似的问题无论如何,经过一些谷歌搜索,这似乎发生在PHP 5.3.8中。因此,升级可能是另一种选择。
发布于 2014-02-14 22:57:55
是的,你只需要做:
parse_str( urldecode( file_get_contents("php://input") ), $result );
var_dump( $result );https://stackoverflow.com/questions/14710608
复制相似问题