[試] max_input_varsの制限を回避する方法 | 投稿データの一部が反映されない場合は要確認

[試] max_input_varsの制限を回避する方法 | 投稿データの一部が反映されない場合は要確認
photo credit: Bill Selak via photopin cc

こんにちは、marubon(@marubon_jp)です。

PHPパラメータのmax_input_varsの影響により、WordPressで投稿データの一部が反映されないという罠にはまりました。原因と対応方法を共有します。

SPONSORED LINK

発生事象

WordPressの記事投稿画面で、更新ボタンを押してもAll in One SEO PackのDescriptionとKeywordsのフィールド値が反映されない(保存されない)という事象が発生しました。

原因

PHP 5.3.9以降に設けられた設定のmax_input_varsの制限にひっかかったことが原因です。

発生メカニズム

max_input_varsは、許容するGETやPOSTパラメータ(入力変数)の数です。この設定値を超えてしまうと、そこから後ろの(はみ出した)データがカットされる仕様になっています。

プラグインやカスタムフィールド追加による編集項目追加により、送信するパラメータ(入力変数)が増えてしまったことが、この事象に遭遇したきっかけです。

結果的にmax_input_varsの初期値である1000を超過してしまい、はみ出したAll in One SEO PackのDescriptionとKeywordsのフィールド値(データ)がカットされてしまったようです。

参考までですが、ログファイルにmax_input_vars超過に関するエラーログが出力されていました。

対応

考えられる対応として、以下の2つがあげられます。

  1. プラグインやカスタムフィールド等の削減によりパラメータの数を削減する(入力変数を削減する)
  2. PHPパラメータ max_input_varsの設定値を修正する(制限を緩和する)

利便性は損ないたくなかったので、今回はmax_input_varsの設定値を変更することにしました。

PHPの設定ファイルであるphp.iniに以下を追加します。デフォルト値が1000なので、余裕を見て2000を設定しました。

この対応により全てのフィールド値が正常に反映(保存)されるようになりました。

まとめ

WordPressで投稿データの一部が反映されなくなった経験から、PHPパラメータのmax_input_varsの影響と回避策としてmax_input_varsの設定値を修正する方法を紹介しました。

一部の投稿データが反映されなくなったら、原因の一つとしてmax_input_varsの影響を疑ってみて下さい。すぐに解決できるかもしれません。