(Zabbix1.8.1)グラフの日本語の文字化けについて

初めて投稿させて頂きます。

zabbix1.8.1のグラフの日本語の文字化けについて、
ご相談させて下さい。

同フォーラムや他サイトより、zabbix1.8.1では、
グラフの日本語の文字化けが存在することを知りました。

今回、zabbix1.8.1を使用する機会がありまして、
文字化けしているか確認した所、グラフの下に表示される凡例
(最大など)部分に文字化けがあり、以下のサイトを参考に対処
を行ったのですが、文字化け部分に変化はなく、解消されません
でした。

何か良い解決方法やヒントをご存じの方がおられましたら、
ご教授下さい。

※文字化けの形ですが、参考サイトでは□に化けてました。
私の環境では、ロシア文字?のような、aやoの上に点を付けた
ような文字で化けています。なにか関係ありますでしょうか?

<作業内容>
?IPAフォント(バージョン002.03)をダウンロードし、
ZabbixのWebコンテンツのパスにあるzabbix/fontsに「ipagui.ttf」を配置

?include/defines.inc.phpの変更
define('ZBX_GRAPH_FONT_NAME','DejaVuSans');

define('ZBX_GRAPH_FONT_NAME','ipagui');

?文字化けの確認

<参考にさせて頂いたサイト>
http://kodai74.blogspot.com/2009/12/zabbix-18.html

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー kodai の写真

こんにちは。

その文字の化け方ですと、フォントの問題ではなくデータベースのエンコード設定の可能性が高いです。

データベースは必ずutf-8で作成する必要がありますので、以下のページなどを参考にMySQLの設定を行ってみてください。

Zabbixのインストール:
http://www.zabbix.jp/modules/bwiki/index.php?ZABBIX%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

ユーザー sky555 の写真

ご回答ありがとうございます。

また、ご連絡が遅くなりまして、申し訳ありませんでした。

ご指摘頂いた通り、DBの文字コードを確認したのですが、

UTF8でデータベースを作成しております。
(DBはPostGresを使用しております)

他に気になる点はございますでしょうか?

申し訳ありませんが、よろしくお願い致します。

ユーザー KAZ の写真

sky555さん

ブラウザがchromだと文字化けが発生する事があります。

ユーザー sky555 の写真

ご回答を頂きまして、ありがとうございます。

ブラウザですが、Firefox3.0.5で確認しております。

ユーザー Yossy の写真

PostgreSQLでのzabbixDBのエンコードを見たいため、

postgreユーザで
「psql -l」
を実行してください。

またPHPのZabbixコンテンツ配下に設定されている
[mbstring]
の項目はどうなっているでしょうか。
Zabbixコンテンツ以下に下記のphpファイルを作成し、
出力してください。
info.php
-----------中身-----------
<?php
phpinfo();
?>
--------------------------
守秘の情報も出るため、mbstringのみで結構です。

それらの結果をお教えいただけますでしょうか。

ユーザー VAXVMS の写真

私の場合は1.8.2ですが、IPA Font 3.2(ipagp00302.zip)ipagp.ttfを使用して問題なく日本語表示が出来ています。
Linux環境はCentOS5.4でデフォルトのMySQLですが。
FireFoxは3.0.12です。

ユーザー vmorita の写真

初めて投稿させて頂きます。PHPを用いたM2M通信サービスを提供するMVNOでネットワーク監視システムとしてZabbixの利用を検討しています。

まず試験用としてCentOS-5.5を基本に最新モジュールの使用を前提として、Apache-2.2.15/PHP-5.3.2/PostgreSQL-8.4.4をこれに依存関係のあるモジュールを含めて全てソースからコンパイルしてzabbix-1.8.2を立ち上げました。また、日本語環境を実現するため、これとは別にZABBIX-JPからzabbix-web-1.8.2-1.el5.JP.i386.rpmをインストールして、./include/defines.inc.php、./fonts/ipagui.ttf、./include/locales/ja_jp.inc.php等のモジュールを差し替えました。

この状態で一応正常に動作し始めたのですが、このスレッドの sky555 さんの報告と全く同じ現象でグラフ表示の文字化けが発生しました。当初、本スレッドでご指摘のようにMySQLとPostgreSQLの差やデータベースのロケールとUTF-8文字コードの設定などに問題があるのかと思いましたが、その方向で調査しても解決策は見つかりませんでした。

それでもう一度この辺についてPHPコードを元から洗い直した結果、原因と対応策が判明しましたので報告させて頂きます。

グラフ内に日本語表示するサブルーチンは./include/graphs.inc.phpの1231行目から定義されているimageText()という関数ですが、実際に日本語文字を画像としてグラフに埋込む処理は1234行目の

if($gdinfo['FreeType Support'] && function_exists('imagettftext')){

というIF分が成立した時に実行されるPHPの imagettftext() という関数です。ところがPHPマニュアルによると「この関数は GD ライブラリと » FreeType ライブラリの両方が必要です。」とあります。PHPをソースからコンパイルする時、GD モジュールはPHPが必要なモジュールを独自にインストールしますが、FreeType モジュールはライブラリとして事前にインストールしておく必要があるのにこれが抜けておりました。このため、imagettftext()関数が存在せず、この関数による日本語文字の埋め込みが出来ないため、1275行目の else{ で抜けたあと英数字しか処理できない imagestring() 関数で文字が埋込まれたため、UTF-8コードで記述された文字が表示できず文字化けしていたというのが第一の原因です。

PHPをソースからコンパイルする時は、予め FreeType2 ライブラリをインストールした後、./configure オプションとして以下のオプションを選択することが必要です。

--with-gd --with-freetype-dir=[dir] --enable-gd-native-ttf

こうして imagettftext() 関数が使えるようになって、今度は大丈夫とグラフ表示してみたのですが、表示される文字は前とは変わったものの今度はマルチバイト文字特有の文字化けが発生してしまいました。

今度は、「imagettftext()」 と「文字化け」でググってみるとやはりもう一つ原因が……。

日本語文字をこれまでの普通のSJIS環境で表示するため、GD モジュールで日本語サポートをする時、通常 ./configure オプションとして
--enable-gd-jis-conv
というオプションを付けてコンパイルされることが多いようです。そのため、imagettftext() 関数は本来、UTF-8コードを渡すことで使用するのですが、このオプションが付いてPHPがコンパイルされていると SJIS で渡さないと、UTF-8 コードでは文字化けしてしまいます。

今回の僕のケースはコンパイルオプションでこれを外せばOKとなると思われますが、他アプリとの共存も考慮して今回は graphs.inc.php の 1235 行目から以下の3行を追加しました。

if($gdinfo['JIS-mapped Japanese Font Support']){
$string = mb_convert_encoding($string, 'SJIS', 'UTF-8');
}

これで"--enable-gd-jis-conf"の有無に係わらず、正常にグラフ内に日本語が表示されるようになりました。
以上、不具合対処報告でした。これからもよろしくお願いします。

ユーザー VAXVMS の写真

vmotitaさん、

詳しい調査と報告ありがとうございました。
ところで、私のケースはひとつ前のリプライにありますが、全てZABBIX.COMのソースからZabbixを構築し、その他のソース修正は一切行っておらず、1.8.2でテンプレート、トリガー、グラフ、マップすべて日本語を使用しており、いまだ文字化けも起きずに稼働しております。何が違うんでしょう?
私の場合は、全てCentOSの環境でテンプレート等すべてを日本語化しております。

ユーザー vmorita の写真

VAXVMS さん、こんにちは。

> 全てZABBIX.COMのソースからZabbixを構築し、その他のソース修正は一切行っておらず、1.8.2でテンプレート、トリガー、グラフ、マップすべて日本語を使用しており、いまだ文字化けも起きずに稼働しております。何が違うんでしょう?

Zabbix-1.8.2 のソース配布版には何の問題もありません。違いはPHPのインストール方法だけですね。VAXVMS さんの場合、Apache や PHP のインストールは CentOS5.4 の配布版をご使用になったのか、ソースからコンパイルされたのかは不明ですが、PHP のコンパイル時に FreeType がインストールされており、GD も普通に --enable-gd-jis-conv オプションを付けずにコンパイルされていたため問題はなかったのだと思います。 僕の graphs.inc.php の修正は必須という訳ではなく、他のSJISを使用するPHPアプリと混在する環境であれば入れた方がベターかなという程度のものです。

ところで、VAXVMS というハンドルネームはもう20数年前のソフト開発環境を彷彿とさせて懐かしいですね。能力的には数年前のPCよりも貧弱なミニコンに数千万円もかけて空調した部屋に入れ、VT100等の端末を何台もぶら下げて…。僕らも随分お世話になりました。(アッ、歳が知れてしまいますね :-D )

PS. 補足ですが、zabbix-1.8.2 を本家のソースからコンパイルしただけで日本語環境で使用すると、グラフの日本語が文字化けするだけでなく、他にもいくつか予期した通りに動作しない項目がありました。これは本家配布版の include/locales/ja_jp.inc.php に未定義の翻訳があることに因るようです。ZABBIX-JP から zabbix-1.8.2-1 として配布されている PHP フロントエンド版には多数の翻訳項目が追加されて問題は解決されましたが、文字化けや翻訳の問題を解消するため本家のソースからコンパイルするユーザ向けにも、include/defines.ini.php、fonts/ipagui.ttf、include/locales /ja_jp.inc.php をまとめて別途配布して頂けると有り難いです。

ユーザー VAXVMS の写真

vmoritaさん、

違いはPHPのインストール方法だけですね。VAXVMS さんの場合、Apache や PHP のインストールは CentOS5.4 の配布版をご使用になったのか、ソースからコンパイルされたのかは不明ですが、

私のケースはCentOSに含まれているApacheとPHPをそのまま使用しています。

PHP のコンパイル時に FreeType がインストールされていて、GD も普通に --enable-gd-jis-conv オプションを付けずにコンパイルされていたため問題はなかったのだと思います。 僕の graphs.inc.php の修正は必須という訳ではなく、環境によっては入れた方がベターかなという程度のものです。

了解いたしました。色々と調査して頂き、また情報をシェアして頂き感謝です。

ところで、VAXVMS というハンドルネームはもう20数年前のソフト開発環境を彷彿させて懐かしいですね。能力的には数年前のPCよりも貧弱なミニコンに数千万円もかけて空調した部屋に入れ、VT100等の端末を何台もぶら下げて…。僕も随分お世話になりました。(アッ、歳が知れてしまいますね)

過去の栄光にすがっているわけではありませんが、人生の中で一番お世話なったOSの名前を、少しでも後世に残したい気持ちからハンドル名にしました。ひょっとするとその当時のD社主催セミナ等ですれ違っていたかもしれませんね。当時でかいセミナでは良くプレゼンやってましたので。(ひょっとして同世代?)