プログラム最終更新日:2024/07/27ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.phpのstrposの注意点その1はもちろん、あれですよね、返り値の比較演算子を三つ(「!==」か「===」)にしろ!というやつですよね。ないとstrposで見つからなったときの返り値である「false」と見つかったけどそれが先頭にあった場合の「0」を区別できないじゃん、というやつです。ここではそんなphpのstrposの注意点その2を紹介したいと思います。いう私もここでいったんバグを生み出しました...。数値はstringにキャスト!strposの第2引数、つまり検索文字列の方ですがこっちは数値が入っちゃ駄目なやつなんです。そりゃそうだろうなーという感じなんですが、今回IPアドレスの判定にstrposを使ってて、そうすると第2引数も「111.111.111.111」みたいな値になるんですよね。どんだけ小数点記号あるの?という感じなんですがなぜかphpはこれを数値、というか浮動小数点と思うらしく、これでstrposを使うとfalseになるんです。ことで第2引数の方はキャストしましょう。(string)$keyword)詰まったいきさつこれは私が悪いんですが、開発環境と本番環境のPHPのバージョンが違うんですよね。本番環境の方がちょっとだけ高かったはず。開発環境ではstrposの第2引数にIPアドレスをそのままぶち込んでもちゃんと検索してくれたんですが、本番環境だと検索してくれなくて数時間悩みました。phpのstrposの説明文を読むと、needleには数値を渡しちゃいけません、って書いてて「うーん、開発環境だと大丈夫だったけどもしかしてこれかなぁ」でキャストを入れてみるとちゃんとstrposが機能するようになってくれました。まとめここではphpのstrposの注意点その2を紹介しました。まとめるとstrposの第2引数で数値かもしれないものを渡すときは、明示的にstringにキャストしておこう!という事。やっておいて損はないのでとりあえず第2引数はもう固定で(string)をつけておくのがおすすめです。