#4824

見えない不具合


web制作


ピクチャレ大会運営のために定期的にPHPをいじるようになっている今日この頃ですが、
基本的にはすべて独学、しかも必要な関数を必要なときだけ検索して使うという
付け焼き刃スタイルで頑張っているため、どうしても体系的な知識には欠けるところがあり、
また厄介な関数は忘れてしまうと何度も検索してしまうということもあります。

昨夜、第9回期間限定ランキングを前にAjaxでリアルタイムに表示するスイッチを作れないか、
などと思い立ち、久々に頑張ればできそうな機能を思いついてワクワクしていたのですが、
開催日が想定よりも早いタイミングになったこと、
頑張ればできそうとはいっても短期間での実現には無理があり、結局断念しました。
というわけで日の目を見なかった機能ですが、その開発にも紆余曲折がありまして。
Ajaxでのデータ制御は基本的に表示用PHP、データを運ぶJS、裏でデータを処理するPHP、
などと複数のファイルを作って横断的にデータをやりとりするという仕組みになっています。
通常、表示用PHPだけなら深刻なエラーが出てもどこの何行目が悪いのかがすぐに分かるため、
「エラーが出ているかどうかさえ分からない」という事態は起こりません。
またJS単独のエラーに関しても、webブラウザでF12キーを押すと出てくる開発ツールに
どこがエラーなのかを表示してくれる機能があります。

しかし、Ajaxを経由してデータを処理するPHPのエラーは表示用PHPからは表示されません。
戻り値がPHPのエラーメッセージだったりすると
JSの方でJSONのパラメータが不正だよという警告が出るのですが、
この時点でJS本体は無事に動いていることが多く、このエラーには気付かないことが多いです。
自分もこれでえらく時間を食ってしまいましたが、
どうやらこういう場合は「データ処理用PHPに直接アクセスしてみる」
というのが手っ取り早い検査方法みたいです。
データ処理用PHPは直接アクセスされると困るので
変数$_POSTに値が入っていない場合は処理をしないようにする場合がありますが、
そういう分岐を一旦外してアクセスしてみると
動作不具合の正体がひょっこり出てくることも多いです。

自分はどうもAjaxをいじるたびにこの穴にハマってしまっている気がするので、
またハマることを避けるためにも自戒を込めて今回は敢えてブログに書きました。
とても初歩的ですが「ファイルを分けたら必ず個々のエラーを確認する」ということで
今後は気を付けていこうかと。

コメントを残す