PHP5.4にするとよく見かけるWarning: Illegal string offset ‘○○○’ in
使用しているサーバーのPHPのバージョンが5.4以降になってもうだいぶ経っているのですが、使用しているphpファイルが「Warning: Illegal string offset ‘○○○’ in」を返していた。Warningを返す箇所は、ファイルの何行目かを表示してくれるので、どこがおかしいかはすぐに判る。それでも思い通りに動いてくれていたので、とりあえずWarningの出る箇所に@を付けておけば、Warningは表示しなくなるのでそのまま使っていた。でもWarningが表示されないとはいえ解決されたわけではないから、ずっと気になっていた。この度ホームページをリニューアルした折、このWarningを解決した時の備忘録です。
まずこの「Warning: Illegal string offset ‘○○○’ in」とはなんだろう…?調べてみるとこのWarningは、存在しない文字列に関数がアクセスしようとするときに発生するらしい。PHP5.3からPHP5.4にアップデートした時、このWarningが表示されるケースが多いみたいだ。
Warning表示されるファイルというのは、Sapphirus.Bizさんのところで配布されている「クリックカウンタ」というものだ。この「クリックカウンタ」は、私のところで配布しているテンプレートやテーマの統計を取るのに使用している。年・月・日毎に棒グラフで表示してくれるし、とても優れものだ。
PHP5.4ではWarningが表示されます
foreach ($result as $key => $arr) { $count_per = round($arr['count'] / $result['count_max'] * 95); // code here }
関数を修正する
issetを使用して“もし文字列が存在するならアクセスする”という命令文を該当箇所に付け加えれば、Warningは出なくなるようだ。
foreach ($result as $key => $arr) { if (isset($arr['count'])) { $count_per = round($arr['count'] / $result['count_max'] * 95); // code here } }
PHPに詳しい人でしたらすぐに直せるんでしょうね。そうでない私は先人の知恵をお借りすることとなりました。今回参考にさせていただいたサイトは「うしくんの日々」です。
コメントを残す