プログラムというのは上から下へ流れていく。
PHPならなおさらスレッドの考えはしなくていいため、プログラムで一連の流れを追うだけで原因を探れるはずだがここ1年解決しなかった。
最初の対処(ログ埋め)
とにかくログを埋め込みました。本来ない重複データが原因だったためデータを作成、更新、削除の際のログを埋め込むようにしました。
重複したデータが出た際に、ログを確認して原因を探ったがさっぱり解決しなかった。
そのためまずデータをすぐ正しいデータにするためにデータチェックを作成した。
データチェック
SQLで作成できたため、なんとかチェックできるようになった。データ作成時期としては月1ぐらいのため、自分で知りたいタイミングでできるようWEBページで作成した。
とりあえずデータを削除すること自体は簡単にできるようになった。
ただし根本的な解決ではないので、月に数時間は時間をとられるようになった。
問題が拡大
これが本気で取り組むきっかけになったが、ちょっと問題が悪化した。かなりのデータができてしまい、手作業で解決するのに1日かかってしまい、仕事にならなくなった。
データ量も増えてきたため、本気でデータとにらめっこの状態になりました。
ログから原因を検証
だいたいの場所は把握していたので、ソースを読むこと自体は問題なかったが、やっぱりわからない。
そこでログの埋め込みをした内容をずっとにらめっこ。。。
ログの時間で本来同時にデータができるところでできていないことを発見。これが糸口になったみたいです。
トークンチェックによる実装ミス
原因はデータのチェックをした時にトークンによる不正チェックをおこなっているところにあったみたいです。
画面で表示している時に、別画面へいくとデータが登録できない不具合があった。これが影響していたみたいで、そのまま登録ボタンを押した時に予期しないデータができてしまっていた。
ここまでわかればなにをすればいいかわかる。
トークンのセッション値のキーを変えるだけでいい。
これでやっと解決です。
今考えれば、まぁ確かにそうですよね。
セキュリティのための仕組みに踊らされた形ですが、使い方をしっかり把握しないと不具合につながる。
かなり反省しました。やっぱり原因はあるもんですねー。これで毎月の作業時間が減りましたねー。
はぁ、なかなか辛かった。。。