メンテナンス・トラブルシュート - PHP - PHP 7.2 - A non-numeric value encountered
- 1. 概要
- 2. 調査
- 3. 対応
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;
と、変数をキャストすることにしました。
|
|