メンテナンス・トラブルシュート - PHP - PHP 7.2 - A non-numeric value encountered
1. 概要 ウェブサーバのエラーログに [Sat Jul 07 10:42:35.506855 2018] [php7:warn] [pid 62943] [client 192.168.1.5:50142] PHP Warning: A non-numeric value encountered in /パス/ソース名.php on line 138, referer: http://URI/ というのが出力されます。 2. 調査 これは「PHP マニュアル - 付録 - PHP 7.0.x から PHP 7.1.x への移行 - その他の変更」に記載があります。 無効な文字列による算術演算の通知 数値形式ではない文字列を使って、数値を期待する演算 (+ - * / ** % << >> | & ^ や、これらを用いた代入演算) を行おうとしたときに、 E_WARNING あるいは E_NOTICE レベルのエラーが発生するようになりました。 E_NOTICE が発生するのは、文字列が数値で始まっていながら非数値で終わる場合で、 E_WARNING が発生するのは文字列中に数値が含まれない場合です。 以上引用。 例題として <?php '1b' + 'something'; 3. 対応 実際のソースでは public function 関数名($table, $offset) { global $connect; $sql = "select 略 "; $sql .= "order by no desc offset ". $offset * PAGE . " limit " . PAGE. " "; $resource = pg_query($connect, $sql); $i = 0; というコーディングがしてあります。 6行目の個所で出力されているわけです。 最終的には public function 関数名($table, int $offset) としたいのですが、現時点では、呼び出し側の修正量が大量になりますので、今回は public function 関数名($table, $offset) { global $connect; $sql = "select 略 "; $sql .= "order by no desc offset ". (int)$offset * (int)PAGE . " limit " . PAGE. " "; $resource = pg_query($connect, $sql); $i = 0; と、変数をキャストすることにしました。
[Sat Jul 07 10:42:35.506855 2018] [php7:warn] [pid 62943] [client 192.168.1.5:50142] PHP Warning: A non-numeric value encountered in /パス/ソース名.php on line 138, referer: http://URI/
無効な文字列による算術演算の通知 数値形式ではない文字列を使って、数値を期待する演算 (+ - * / ** % << >> | & ^ や、これらを用いた代入演算) を行おうとしたときに、 E_WARNING あるいは E_NOTICE レベルのエラーが発生するようになりました。 E_NOTICE が発生するのは、文字列が数値で始まっていながら非数値で終わる場合で、 E_WARNING が発生するのは文字列中に数値が含まれない場合です。
<?php '1b' + 'something';
public function 関数名($table, $offset) { global $connect; $sql = "select 略 "; $sql .= "order by no desc offset ". $offset * PAGE . " limit " . PAGE. " "; $resource = pg_query($connect, $sql); $i = 0;
public function 関数名($table, int $offset)
public function 関数名($table, $offset) { global $connect; $sql = "select 略 "; $sql .= "order by no desc offset ". (int)$offset * (int)PAGE . " limit " . PAGE. " "; $resource = pg_query($connect, $sql); $i = 0;