zabbixでPHPの警告が出る場合の対処
投稿日:
■環境
zabbix 3.2
PHP 7.1
PHP7.1でzabbixを動かすと、以下の警告が出ました。
A non well formed numeric value encountered [zabbix.php:21 → require_once() → ZBase->run() → ZBase->processRequest() → CView->getOutput() → include() → make_status_of_zbx() → CFrontendSetup->checkRequirements() → CFrontendSetup->checkPhpMemoryLimit() → str2mem() in include/func.inc.php:410]
A non well formed numeric value encountered [zabbix.php:21 → require_once() → ZBase->run() → ZBase->processRequest() → CView->getOutput() → include() → make_status_of_zbx() → CFrontendSetup->checkRequirements() → CFrontendSetup->checkPhpPostMaxSize() → str2mem() in include/func.inc.php:410]
A non well formed numeric value encountered [zabbix.php:21 → require_once() → ZBase->run() → ZBase->processRequest() → CView->getOutput() → include() → make_status_of_zbx() → CFrontendSetup->checkRequirements() → CFrontendSetup->checkPhpUploadMaxFilesize() → str2mem() in include/func.inc.php:410]
警告が出ている箇所は以下のようになっています。
[/usr/share/zabbix/include/func.inc.php]
394 /**
395 * Converts strings like 2M or 5k to bytes
396 *
397 * @param string $val
398 *
399 * @return int
400 */
401 function str2mem($val) {
402 $val = trim($val);
403 $last = strtolower(substr($val, -1));
404
405 switch ($last) {
406 case 'g':
407 $val *= 1024;
408 /* falls through */
409 case 'm':
410 $val *= 1024;
411 /* falls through */
412 case 'k':
413 $val *= 1024;
414 }
415
416 return $val;
417 }
この引数の「$val」には『256M』のように単位付きの数字が入ってくるようで、
それを『$val *= 1024』と数字のように扱っているので警告が出ているようです。
(警告は出ているが、処理自体は正常に行なわれている)
解決策は色々あると思いますが、とりあえず以下のように修正したら
警告は表示されなくなりました。(404行目を追加しています)
401 function str2mem($val) {
402 $val = trim($val);
403 $last = strtolower(substr($val, -1));
404 $val = intval($val);
405 switch ($last) {
406 case 'g':
407 $val *= 1024;
408 /* falls through */
409 case 'm':
410 $val *= 1024;
411 /* falls through */
412 case 'k':
413 $val *= 1024;
414 }
415
416 return $val;
417 }