特定の動作時のみプログラムが動かない
つい先日、クライアントさんに納品した案件で不具合があった。本番環境にて稼働させたところ問題が発生したとのことだった。まぁ、本番環境というのは得てしてテスト環境よりもアクセス数等が増加するし、想定外の操作をしてしまう人もいるはずなので問題が出てもおかしくはないのだが(もちろん想定外の動作などないように、各種想定をされたプログラムがいいのはいうまでもないけれど)。
今回のプログラムで、クライアントから「トラブル発生」の連絡を受けた際に想定したのは「max_execution_time」だ。つまり想定した数よりも多いデータ数を処理しなくてはいけなくなってしまったので、当然処理時間が増え、システム規定の時間では間に合わなくなってしまった、という場合だ。
実際、現地を訪れエラーの出る処理を試してみた。しかし、エラーは一定時間をおいて出るのではなくすぐに出る。しかも表示されるエラーはIEのエラー(ちゃんと確認しておけばよかったと後悔している)。
リンクをクリックして、すぐにエラーが出るのであれば、max_execution_timeの問題ではないはずだ(PHPのエラー画面が表示されるはずだし、システム規定の時間はプログラムが稼働するはずだから)。次に想定したのは、memory_limit。取り扱うデータ量が増えることは容易に想像できるから、ini_setコマンドで多めに設定してみた。これで見事解決した。
本番環境では、得てしてプログラムが想定外の動作をしてしまうことは多々あるが、今回はその典型となるような例だった。プログラムのエラーが発生しているのか、環境的な問題でエラーが出ているのかは判断がつきにくいところではあるが、相応の経験をしていれば意外と簡単に原因を突き止められるものだなぁ、と思った次第であった。