- ベストアンサー
phpのバージョンの違いのエラー
- phpのバージョンを8.0にしたら、型が異なるので計算できないというエラーが出ています。
- ページの前後を簡単に行き来するために、リンクのページ名に数値を付けていますが、バージョンを変更したことでエラーが発生しています。
- エラーの修正方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
basename() https://www.php.net/manual/ja/function.basename.php $page=intval(substr(basename($_SERVER["REQUEST_URI"]),4)); if ($page===0) // error else { echo '<a href="page' . ($page-1) . '">... 前のページ echo '<a href="page' . ($page+1) . '">... 次のページ } 私ならこんな感じ。 最初にbasenameで、アドレスの「最後の/以降を取り出す」 先頭から4文字削除したものを「数字が入った文字列として取り出す」 それを、文字列から数値に変換。 0が帰ってきたら、不正なリクエストだったとして、エラー処理 それ以外なら、ページ制御に回す。
その他の回答 (1)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
まず、きになったことが。。 substrで-2で取り込んでますが、これ逆に 先頭から4文字目の方がよくないですか? 先頭が必ず"page"だとわかっているわけですから、 strlen("page")=4.... しかし、実質固定なので、 substr($uri,4); 4文字目以降全部を取り出す。 ちなみ、変数名がurl になってますが、REQUEST_URIは URLではなくURIが帰ります。 取り出したら、それはまだ「文字」なので、 https://www.php.net/manual/ja/function.intval.php こいつでINT(数値)に変換します。 それに対して加減算をすれば、OKかと思います。 もし、パラメタが、"pageABCD"のように 数字に変換できない物が使用されている場合、 intvalは0を返すので、 0が取り込まれた時点で異常と判断 (0ページは普通は、元々ないので、それを基準にする) if(ctype_digit($uri)) これは不要。 intvalが数字に変換できないことを0で返すので、 変換とチェックが同時に行えるので、綺麗になります。 また、1桁2桁わけもいらないので、ソース量も半分になり、 バグの発生率も減るので、どうでしょうか? PHP8から型のチェックが厳重になってるので、その辺で 引っかかったものと思われます。 ってな感じでは、答えになりますでしょうか?
お礼
理解できるまでに時間がかかると思いますが、 ありがとうございました。
お礼
サンプルまでありがとうございました。