2013-02-05 35 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);