ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.
phpのstrposの注意点その①はもちろん、あれですよね、返り値の比較演算子を三つ(「!==」か「===」)にしろ!というやつですよね。じゃないとstrposで見つからなったときの返り値である「false」と見つかったけどそれが先頭にあった場合の「0」を区別できないじゃん、というやつです。
で、ここではそんなphpのstrposの注意点その②を紹介したいと思います。かくいう私もここでいったんバグを生み出しました…。
数値はstringにキャスト!
strposの第2引数、つまり検索文字列の方ですがこっちは数値が入っちゃ駄目なやつなんです。
で、そりゃそうだろうなーという感じなんですが、今回IPアドレスの判定にstrposを使ってて、そうすると第2引数も「111.111.111.111」みたいな値になるんですよね。
で、どんだけ小数点記号あるの?という感じなんですがなぜかphpはこれを数値、というか浮動小数点と思うらしく、これでstrposを使うとfalseになるんです。
てことで第2引数の方はキャストしましょう。
strpos($ip, (string)$keyword)
詰まったいきさつ
これは私が悪いんですが、開発環境と本番環境のPHPのバージョンが違うんですよね。
確か本番環境の方がちょっとだけ高かったはず。
開発環境ではstrposの第2引数にIPアドレスをそのままぶち込んでもちゃんと検索してくれたんですが、本番環境だと検索してくれなくて数時間悩みました。
phpのstrposの説明文を読むと、needleには数値を渡しちゃいけません、って書いてて「うーん、開発環境だと大丈夫だったけどもしかしてこれかなぁ」でキャストを入れてみるとちゃんとstrposが機能するようになってくれました。
まとめ
ここではphpのstrposの注意点その2を紹介しました。
まとめるとstrposの第2引数で数値かもしれないものを渡すときは、明示的にstringにキャストしておこう!という事。やっておいて損はないのでとりあえず第2引数はもう固定で(string)をつけておくのがおすすめです。
【おしらせ、というか完全なる宣伝】
文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.
こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /