3

私はWordpressでこの奇妙なバグを解決していて、Wordpressがどのように機能するかはわかりませんが、問題を特定して問題の根本がどこにあるのかを確認するために1時間走り回りました.

$_POST には要求されたデータがないため、問題は更新されていないことが判明しました。

ブラウザーからアクセスしているファイルの先頭で、他のコードの前に、次のことを行いました。

echo file_get_contents("php://input");
print_r($_POST); exit();

wordpress は $_POST をキャッチオール グローバルとして使用し、それに書き込みます。ワードプレスがデータをどこかに追い出すのではないかと思ったのですが、それが見つかりませんでした。とにかく、これはファイルの先頭にあり、他の何かがまったく発生する前です..その前に変数を変更することさえ可能だとは思いません

そこからの出力は

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_levelmax_input_varsくださいmax_input_time。値がわからない場合は、デフォルトの値を試してください。PHPのドキュメントページをチェックして、デフォルト値とその意味を調べてください。

  2. 拡張機能を実行している場合はsuhosin、それを無効にしてみて、それが役立つかどうかを確認してください。また、すべてのsuhosin.post.* 構成キーは面白そうです。

  3. グーグルは同様の問題を明らかにします1、2

  4. からアクセスしてみてください$_REQUEST-$_REQUEST['widget-text']['3']['text']

とにかく、グーグルした後、これはPHP5.3.8で発生するようです。したがって、アップグレードは別のオプションかもしれません。

于 2013-02-05T16:50:08.287 に答える