Zabbix 2.3 で PHP の encoding 周りのエラーが発生

とりあえず 2.3.1 をビルドしてみたわけですが、

Zabbix 2.1 が出てからほぼ1年になるのねぇ、と思いながら、次のメジャーバージョン 2.4 の開発版である 2.3.1 を deb パッケージにしてみた。

[From Zabbix 2.3.1 を 独自にパッケージングしてみた - Soukaku's HENA-CHOKO Blog]

インストールしてみたら、今度は色んな所で、

ini_set(): Use of mbstring.internal_encoding is deprecated [dashboard.php:22 → require_once() → ZBase->run() → ZBase->initLocales() → init_mbstrings() → ini_set() in /usr/share/zabbix/include/locales.inc.php:25]

というエラーメッセージが表示されるように…。
例えば、こんな↓感じ。

ダッシュボードに表示されるエラーメッセージ

これに関しては、 Zabbix のサポートフォーラムの方に、同じエラーが出ていたことが報告されていて、それ自体は pre-2.2.5rc1 、 pre-2.3.2 で fix されているということらしいので、

CLOSED. Fixed in pre-2.2.5rc1 r46852, pre-2.3.2 r46853.

[From [#ZBX-8278] frontend-php: Use a deprecated function : mbstring.internal_encoding - ZABBIX SUPPORT]

svn で取ってきていた 2.3.3 のソースとインストール済みの"/usr/share/zabbix/include/locales.inc.php" を比較してみると、PHPの encoding の扱い(と思われる)の部分が確かに書き換わっている。

nexus01:~# diff -u /usr/share/zabbix/include/locales.inc.php /usr/local/src/zabbix-2.3.3.trunk.47530/frontends/php/include/locales.inc.php
--- /usr/share/zabbix/include/locales.inc.php	2014-05-30 23:52:49.000000000 +0900
+++ /usr/local/src/zabbix-2.3.3.trunk.47530/frontends/php/include/locales.inc.php	2014-06-29 23:40:49.000000000 +0900
@@ -21,24 +21,26 @@
 function init_mbstrings() {
 	$res = true;
-	$res &= mbstrings_available();
-	ini_set('mbstring.internal_encoding', 'UTF-8');
-	$res &= (ini_get('mbstring.internal_encoding') === 'UTF-8');
+	$res &= extension_loaded('mbstring');
+
+	if (version_compare(PHP_VERSION, '5.6', '<')) {
+		ini_set('mbstring.internal_encoding', 'UTF-8');
+		$res &= (ini_get('mbstring.internal_encoding') == 'UTF-8');
+	} else {
+		// it may be necessary to check / set php.internal encoding too after 5.6 is released, see ZBX-8278
+		ini_set('default_charset', 'UTF-8');
+		$res &= (ini_get('default_charset') == 'UTF-8');
+	}
+
 	ini_set('mbstring.detect_order', 'UTF-8, ISO-8859-1, JIS, SJIS');
 	$res &= (ini_get('mbstring.detect_order') === 'UTF-8, ISO-8859-1, JIS, SJIS');
-	return $res;
-}
-function mbstrings_available() {
-	return function_exists('mb_strlen')
-		&& function_exists('mb_strtoupper')
-		&& function_exists('mb_strtolower')
-		&& function_exists('mb_strpos')
-		&& function_exists('mb_substr');
+	return $res;
 }
 /**
+/**
  * Returns a list of all used locales.
  *
  * Each locale has the following properties:

ということで、これについては、ビルドしてあった 2.3.3 をインストールしたことで解消済み、となったわけですが。
実は、まだエラーがある模様…。

ini_set(): Use of mbstring.internal_encoding is deprecated [dashboard.php:312 → CTag->setMenuPopup() → CTag->attr() → CTag->setAttribute() → CHtml::serialize() → CJs::encodeJson() → CJSON->encode() → ini_set() in /usr/share/zabbix/include/classes/class.cjson.php:137]
ini_set(): Use of mbstring.internal_encoding is deprecated [dashboard.php:312 → CTag->setMenuPopup() → CTag->attr() → CTag->setAttribute() → CHtml::serialize() → CJs::encodeJson() → CJSON->encode() → ini_set() in /usr/share/zabbix/include/classes/class.cjson.php:161]

実際には、もっとエラーメッセージ出ているだけど、一部だけ。

PHP 周りのエラーがもう一つ

こちらに関しては、まだサポートフォーラムにも報告されていないようなので、報告してきますかね。とりあえずは、本来の機能である監視ができないということではないようなので、緊急度は低かったりしますけど。

トラックバック(0)

コメントする