EC-CUBE:エラー対応

お仕事で EC-CUBEのカスタマイズをやっていて(いろんなことをやってますよね)、いままで触ったこともなかった「売上集計」を動かしてみたらエラーが出たので、その対応について少しメモ。(きっと誰かの役に立つと思うので)
[code lang=”php”]
/*
*/
Warning: imagettftext() [function.imagettftext]: No character set found in /hoge/data/class/graph/SC_GraphBase.php on line 298
[/code]
最初、「月度で集計する」をやったら、30秒タイムアウトにひっかかって、「期間で集計する」をやってみたら出たエラーがこれです。
 
ググってみてみたら『PHP がバンドル版の GD で構築されていないからではないか?』などというひやっとするようなことが書いてあって(PHPを使っているのは EC-CUBEだけじゃないので、いまさら CONFIGを変えてコンパイルし直すなんてこと、怖くてできない!)、そんなぁと思いつつ、ほかも調べてたら、GDがバンドル版じゃなかったら、そもそも Warningじゃなくて Fatal errorになるんじゃないかと。
[code lang=”php”]
/*
*/
Fatal error: Call to undefined function: imagettftext() in …
[/code]
 
で、エラーメッセージに立ち戻ってみると、No character set found とあるので、キャラクターセットがないと言ってるんだなと。
どうやら、EC-CUBEに標準で付いてくる wlmaru20044.ttf というやつがマズイようなので、IPAのページから最新の「IPAexフォント」をダウンロードして、wlmaru20044.ttfのあるフォント・ディレクトリ(/hoge/data/fonts/)に突っ込んでやります。

そして、エラーの出てるファイル(SC_GraphBase.php)のデファインを IPAexフォントに変えて、わざわざ EUC-JPにしてるところをコメントアウトして、元のUTF-8をいかせばOKです。
[code lang=”php”]
/*
*/
/* /hoge/data/class/graph/SC_GraphBase.php */

/* TTFフォントファイル */
//define(“FONT_PATH”, DATA_PATH . “fonts/wlmaru20044.ttf”);
define(“FONT_PATH”, DATA_PATH . “fonts/ipaexg.ttf”);

/* http://www.php.net/imagettftext を見ると, UTF-8 にしろと
* 書いてあるのに…
*
*/
// $text = mb_convert_encoding($text, “EUC-JP”, CHAR_CODE);
$text = mb_convert_encoding($text, CHAR_CODE);
if($color != NULL) {
ImageTTFText($this->image, $font_size, $angle, $left, $top + $font_size, $color, FONT_PATH, $text);
} else {
ImageTTFText($this->image, $font_size, $angle, $left, $top + $font_size, $this->text_color, FONT_PATH, $text);
}
[/code]
EUC-JPをそのままにしておくと、日本語が化け化けになります。
しかし、なんで EC-CUBEは wlmaru20044.ttf なんかを同梱してるんだろうか?
ライセンスの関係で IPAフォントがバンドルできないのかな?(ライセンスをざっと読んだ限りではそんな制限に引っ掛かるように思えないんだけど)

0 返信

返信を残す

Want to join the discussion?
Feel free to contribute!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です