PHPのエラーログ対応

2018年1月12日

PHP テクノロジー トラブル プログラミング

PHPでプログラムを作った時に、そのままWEBで公開する前に、必ずerror_logファイルをチェックしておきましょう。 僕は、この工程を忘れてしまって、何度も痛い目に合っています。 自分のコーディングしたプログラムはエラーが絶対に無いと断言できるプログラマーなど有り得ない為、自分への確認の意味も込めて、この工程は欠かさないようにしています。 今回は、少し苦しめられた下記2つのエラーについて、原因と対処した方法を書いておきますが、コーディング手段によって、原因も対処方法も様々あると思います。 今回の記事で、原因特定や対処による工数削減になれば幸いです。
in_array() expects parameter PHP message: PHP Notice: Undefined variable

in_array関数による「expects parameter」エラー

in_array関数は、特定配列内に値が存在するかどうか確認する便利関数なんですが、検索する対象の配列がちゃんと配列型になっていないと、このエラーが発生するようです。 もちろん、ちゃんと値を操作する毎に型を意識して、記述できていれば、こんなエラーは現れないんですが、今回は、loop分の中で、一度発生したkey値を二度目は処理しないようにしたいために、その場で配列を作っていきながら行うプログラムでした。 こうした配列が動的な場合、初回の配列セットや、意図しない型になってしまうリスクがある場合、このエラーが発生します。 対応としては、下記のような対策をとりました。 for($i=0; $i<10; $i++){ if(gettype($arr) !== "array"){continue;} if(in_array("hoge" , $arr)){example_proc();} } gettypeでちゃんと型の確認をするだけなんですね。 いちいち書くのはめんどくさいので、処理効率のいいタイミングでまとめて行うのがいいです。

PHP message: PHP Notice: Undefined variable

このログは、しょっちゅう見るな〜と思っていたら、以下のような場合に発生していました。 function hoge(){ for$i=0; $i<10; $i++(){ $str .= $i; } reutrn $str; } この関数では、for分の1回目では、$strが定義されていないのに、".="として追記文が書かれていて、ここでエラーログが発生します。 この対応は、for文の前に、「$str = "";」として、変数を宣言してあげる事でエラーが無くなりました。 長年プログラムを書いていても、こうしたエラーログって出してしまいますね。

プログラマーの品質

そして、体調が悪い時などは、これの解決に数時間かかってしまったりもします。 WEB言語は、型宣言が緩いものが多く、こうしたエラーは、php.iniなどで、warningレベルのものとして、ログ出力すら無くしてしまう対応をしているサイトもありますが、それでは何も解決になっていません。 改めて、プログラマーの品質として、エラーログを出さないというクオリティを考えた方がいいでしょうね。 え?当たり前!?こんな緩い自分の身を引き締まるエラーログでした。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ