我正在研究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正确解析原始数据有任何想法?
答案 0 :(得分:1)
这确实很奇怪。可能是PHP中的错误或配置/扩展问题。
尝试更改配置变量max_input_nesting_level
,max_input_vars
,max_input_time
。如果您不确定值,请尝试使用默认值。检查PHP documentation page以查找默认值及其含义。
如果您正在运行suhosin
扩展程序,请尝试禁用它,看看它是否有帮助。此外,所有suhosin.post.*
configuration keys看起来都很有趣。
尝试通过$_REQUEST
- $_REQUEST['widget-text']['3']['text']
无论如何,经过一些谷歌搜索后,似乎这种情况发生在PHP 5.3.8中。因此升级可能是另一种选择。
答案 1 :(得分:1)
是的,只是这样做:
parse_str( urldecode( file_get_contents("php://input") ), $result );
var_dump( $result );