zabbix图形中文乱码解决
young / / / 阅读量

中文乱码

把相应的字体文件(.ttf)copy到/usr/local/nginx/html/zabbix/fonts,再修改zabbix字体定义配置即可。
可以从windows系统C:\Windows\Fonts中copy喜欢到字体文件,如:simkai.ttf

//define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); // font file name
define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name

提示:很多文章讲替换两条记录,实际上只需要改ZBX_GRAPH_FONT_NAME一条即可,改两条是改了整个调用字体(和直接同名替换DejaVuSans是一个意思)
一般来说按上面的步骤后,乱码就能解决

可能我是个例外,按上面的步骤后,图片乱码依旧,只不过由原来的空心方框变成了看不懂的火星文。一连测试了好几天,终于找到问题出在哪儿了,下面是排查步骤

i.测试数据库

数据库一直都默认为utf8,所以可能性不大。

ii.交叉测试以定位web服务器和php

系统自带apache(httpd)调用源码安装的php,中间有个小插曲,在源码解压及安装的php目录下都没找到libphp5.so,百度后解决(源码编译php时需要通过–with-apxs2=/usr/bin/apxs指定apache库调用,apxs同httpd-devel包提供),于是加上该参数重新编译php,编译安装完,会看到将libphp5.so复制到apache的modules目录。此时重启httpd,结果乱码重现了。

[root@node1 ~]# ll /etc/httpd/modules/libphp5.so 
-rwxr-xr-x. 1 root root 33572931 9月  25 03:26 /etc/httpd/modules/libphp5.so
[root@node1 ~]# ll /usr/local/src/php-5.6.26/libs/libphp5.so 
-rwxr-xr-x. 1 root root 33572931 9月  25 03:26 /usr/local/src/php-5.6.26/libs/libphp5.so

进一步测试通过iso源安装的php

yum -y install php-fpm
sed -i '/127.0.0.1:9000/c listen = /dev/shm/php-fpm.sock' /etc/php-fpm.d/www.conf
sed -i '/;listen.owner/s/^;//g' /etc/php-fpm.d/www.conf
sed -i '/;listen.group/s/^;//g' /etc/php-fpm.d/www.conf
sed -i '/;listen.mode/c listen.mode = 0666' /etc/php-fpm.d/www.conf
systemctl restart php-fpm

因为之前源码编译的php-fpm是监听在tcp 9000,为了更好的对比这里直接直接采用socket监听方式(当然也可以监听不同端口),结果通过nginx调iso源的php-fpm中文显示正常。

总结,iso源httpd+源码编译php中文乱码,iso源php+源码编译nginx中文正常。

zabbix图片乱码是源码编译的php导致

iii.php编译参数调试

经过反复编译测试,发现是由–enable-gd-jis-conv参数引起的,编译php时若加入该参数则会导致zabbix图片中文乱码,去掉后一切正常,也有朋友遇到类似的问题http://www.bubuko.com/infodetail-221610.html

php官方解释

*虽然imagettftext()文档标明只接受UTF-8编码,但如果PHP编译时启用–enable-gd-jis-conv选项的话,那么非ASCII字符(例如汉字、拼音、希腊文和箭头)会被当成EUC-JP编码(phpinfo中美其名曰“支持JIS编码的字体”), 从而导致乱码(由于西文字体没有假名或汉字,一般表现为全部是方框)

Although imagettftext()documentation indicates it only accepts UTF-8 encoding, but if–enable-gd-jis-conv is specified when compiling PHP, then non-ASCII characters(like Chinese, accented characters, Greek and arrows) will be (mis-)treated asEUC-JP encoding (referred to as “JIS-mapped Japanese Font Support” in phpinfo)leading to mojibake (this usually shows up as hollow rectangles, as most fontsfor western text lacks glyphs for kanji or kana)

结论,编译php时不要加–enable-gd-jis-conv

来源:http://ju.outofmemory.cn/entry/283043

支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章