概要ページで日本語名のトリガーが存在する場合にエラーが発生する
はじめまして。
こちらでダウンロードしたZABBIX-JPパッケージの
導入・検証を現在行っているものです。
日本語環境で使用した際の不具合(?)がありましたので、
こちらに記載させて頂きます。
初投稿ですので不備や問題等ありましたらご指摘頂ければと思います。
・環境
ZABBIXサーバ:CentOS5.4
DB:MySQL5.0.77
ZABBIXバージョン:zabbix-1.6.8-1
・現象
日本語名のトリガーが存在する状態で、
[監視データ]-[概要]を開くと、下記のメッセージが出力される。
<code>htmlentities() [<a href='function.htmlentities'>function.htmlentities</a>]: Invalid multibyte sequence in argument[/usr/share/zabbix/include/classes/ctag.inc.php:244] </code>
・現象の詳細
全てのトリガーに対してエラーが出るわけではなく、
特定のトリガー名にのみエラーが発生しています。
・原因
私の方でエラーメッセージの内容から原因を探ってみました。
問題となっている[/usr/share/zabbix/include/classes/ctag.inc.php:244]ですが、
概要ページのポップアップオプションを作成している関数(htmlentities)にて、
文字コード関連のワーニングが発生しています。
htmlentitiesでのワーニングメッセージは、
php.iniのdisplay_errors=OFFの状態でも警告メッセージが
表示されてしまう問題があるようで、その影響でメッセージが出力されているようです。
(当方PHPエンジニアではないので、詳しい方補足頂ければ幸いです)
ワーニングの原因を探った所、
triggers.inc.phpの2035行目でトリガー名が25文字以上あった場合に
切り捨てるロジックがあるのですが、ここでマルチバイト文字列が
不正に切り捨てされてしまい、ワーニングが出ているようでした。
トリガー名によってエラーが出たり出なかったりしたのは、
全体の文字数の関係だったようです。
<code>if(strlen($description) > 25) $description = substr($description,0,22).'...';</code>
当方の環境にてmb_strimwidthを使って試した所、
エラーメッセージが消え、ポップアップオプションも
正常に使用できるようになりました。
<code>if(strlen($description) > 25) $description = mb_strimwidth($description,0,22).'...';</code>
上記対応についてはネットで調べて私の方で試したのみの状況ですので、
本来どう対応すべきなのかご判断頂ければと思い投稿させて頂きました。
以上、よろしくお願い致します。
kodai - 投稿数: 1341
こんにちは。
まだ現象自体は確認できていないのですが、ひとまず関連しそうな情報としては、PHPの設定(php.ini)で
<code>mbstring.func_overload 6</code>
を設定すると改善されないでしょうか?
keru0316 - 投稿数: 2
ご返信、有り難う御座います。
ご提示頂いた設定をphp.iniに追加して試した所、
正常にポップアップメニューが表示されるようになりました。
また、同様に[最新データ]のページでWindowsイベントログが
同様の問題で文字化けしていましたが、
そちらについても改善されました。
取り急ぎご報告させて頂きます。