PHPのエラーログ対応

2018年1月12日

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

t f B! P L
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レベルのものとして、ログ出力すら無くしてしまう対応をしているサイトもありますが、それでは何も解決になっていません。 改めて、プログラマーの品質として、エラーログを出さないというクオリティを考えた方がいいでしょうね。 え?当たり前!?こんな緩い自分の身を引き締まるエラーログでした。

このブログを検索

プロフィール

自分の写真
プログラミングとサーバーを心の底から楽しむクリエーターです。 経営者であり、開発者でもありますが、得意としているのは、アイデア創出で、出来高は無限大です。

ブログ アーカイブ

QooQ