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