登録ユーザーが200名を超える大規模なサイトで、WordPress プラグイン[Attendance Manager]を設置するという案件に携わりました。

最初は問題なく運営できていたのですが、数週間後に先方からエラーの報告がありました。

曰く「情報を入力しても正しく更新・保存ができない」とのこと。

紆余曲折がありましたが、原因が判明しエラーが解消できたので、同じような問題でお困りの方の参考になればと思い、備忘録を兼ねて解決策をメモしておきます。

そもそも[Attendance Manager]とは?

[Attendance Manager]は、店舗サイトなどで従業員の出勤情報を管理できるプラグインです。
特に美容室やエステサロン、医療関係のクリニックなどでの利用が想定されますね。

Attendance Manager - 01
Attendance Manager - 02
Attendance Manager - 03
Attendance Manager - 04

ダウンロードリンクは以下になります。

Attendance Manager

今回の大規模サイトで遭遇した問題とは?

最初は何も問題がなく、普通に使えていたのに、ある時点を境に急に情報が保存されなくなるという不思議な問題が発生しました。

プラグイン本体のコードを確認したり、テストサイトを用意して試してみたり、様々な環境でテストしましたが、なかなか原因が発見できず、時間だけが虚しく過ぎていきました。

そもそも[Attendance Manager]に限らず、ほぼ全てのプラグイン、またはワードプレスの仕組みとして、情報をデータベースに保存するためにPOSTを行うのですが、従業員数(登録しているユーザー数)と、その出勤情報の容量が大きいために、php.ini で設定されている max_input_vars の値を上回り、全てのデータをPOSTできていないという原因を突き止めました。

調べてみたところ、PHP 5.3.9以降、1度にPOSTできる数に上限が設けられていたんですね。

解決策は?

原因がわかってしまえば解決策を講じられます。

しかし今回の場合はサーバーの管理画面へのアクセス権限がなく、php.ini を直接自由に書き換えられる状態ではなかったので、代替案として「.htaccess」に簡単なコードを記述して、max_input_varsの値を「2000」から「10,000」に変更して対応。

具体的には次の1行のコードを記述しました。

php_value max_input_vars 10000

同じことを「php.ini」で記述するなら次のようになりますね。

max_input_vars = 10000

こうして、ようやくエラーを解消することができました。

作業に要した時間は……。

原因を突き止めるまでの時間 = 6時間以上。
解決策を見つけて設定した時間 = 5分未満。

随分と遠回りをして時間がかかってしまいました。

この記事が同じような問題を抱えている方の参考になれば幸いです。
最後までお読みいただき、ありがとうございました。