お仕事で EC-CUBEのカスタマイズをやっていて(いろんなことをやってますよね)、いままで触ったこともなかった「売上集計」を動かしてみたらエラーが出たので、その対応について少しメモ。(きっと誰かの役に立つと思うので)
/*
*/
Warning: imagettftext() [function.imagettftext]: No character set found in /hoge/data/class/graph/SC_GraphBase.php on line 298
最初、「月度で集計する」をやったら、30秒タイムアウトにひっかかって、「期間で集計する」をやってみたら出たエラーがこれです。
ググってみてみたら『PHP がバンドル版の GD で構築されていないからではないか?』などというひやっとするようなことが書いてあって(PHPを使っているのは EC-CUBEだけじゃないので、いまさら CONFIGを変えてコンパイルし直すなんてこと、怖くてできない!)、そんなぁと思いつつ、ほかも調べてたら、GDがバンドル版じゃなかったら、そもそも Warningじゃなくて Fatal errorになるんじゃないかと。
/*
*/
Fatal error: Call to undefined function: imagettftext() in ...
で、エラーメッセージに立ち戻ってみると、No character set found とあるので、キャラクターセットがないと言ってるんだなと。
どうやら、EC-CUBEに標準で付いてくる wlmaru20044.ttf というやつがマズイようなので、IPAのページから最新の「IPAexフォント」をダウンロードして、wlmaru20044.ttfのあるフォント・ディレクトリ(/hoge/data/fonts/)に突っ込んでやります。
そして、エラーの出てるファイル(SC_GraphBase.php)のデファインを IPAexフォントに変えて、わざわざ EUC-JPにしてるところをコメントアウトして、元のUTF-8をいかせばOKです。
/*
*/
/* /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);
}
EUC-JPをそのままにしておくと、日本語が化け化けになります。
しかし、なんで EC-CUBEは wlmaru20044.ttf なんかを同梱してるんだろうか?
ライセンスの関係で IPAフォントがバンドルできないのかな?(ライセンスをざっと読んだ限りではそんな制限に引っ掛かるように思えないんだけど)
SEO対策:基本コース
弊社でお受けしているホームページ制作にもれなくついてくる SEO対策について、きちんとまとめたページを作ろう作ろうと思いつつ、日々の制作に追われていっこうにページができないので、とりあえず、こういうことをやってますよということを技術的な観点からまとめておきます。
さらに読む
EC-CUBEから学ぶ PostgreSQLのリモート接続
EC-CUBE, PostgreSQLなんかの雑誌みたいな見出しですが、EC-CUBEのインストールをしようとして、PostgreSQLのリモート接続ではじかれたので、対処法をメモ。
インストールのDB設定のところでこんなエラーが出たわけです。
TCP/IP接続が許可されてねーんじゃないのということです。
EC-CUBEは、ひとつ前のバージョンをインストールしてるんですけど、どーやってインストールしたんですかね?
ググるとここ(質問 > その他 > PostgreSQLでUNIXドメインソケット接続での使用は可能か)にそれらしいことが書いてありました。
ここでは、EC-CUBEのインストーラの方にパッチをあててますけど、今回は真っ当に PostgreSQLの方をリモート接続できるようにしてみます。
さらにググって、postgresql.conf と pg_hba.conf に設定を書けばいいということがわかったので、こんな風にしてみた。
で、PostgreSQLをリスタートしたら、エラーで起動しないでやんの。
結局、listen_addresses = ‘*’ じゃないといけなかったみたい。なにが問題なんだろうか。動くようになったからいいけど。
WordPressで title属性に改行を入れたいとき
WP TipsNivo Slider の画面キャプションは、imgタグの title属性にキャプション文字列をセットして表示するようになっているんですが、改行文字を入れようとしてはまったのでメモ。
普通、title属性に改行を入れたいときは、このどちらかだとおもいます。
WordPressだと、前者は無視され、BRは改行はするんですが、文字列終わりにゴミが付きます。
こんな感じになるわけです。apply_filtersが余計なことをしてるんじゃないかなという気がフツフツと湧いてきていますが、ここに手を入れると大変そうなので、見なかったことにして、とりあえず何とかしてみます。
the_content()の代わりに get_the_content()を使って、自分で決めた改行コード(|BR|)を変換してるだけです。
やっぱり、apply_filters をちゃんと直すべきですね。(でも、WordPress3.0になったら直ってるかもしれない)
Nivo Sliderを使ったときの些細な問題点
jQueryNivo Slider はすばらしいライブラリなんですが、IE8(or IE7)で使うと、タイミングによってたまに『 ‘undefined’は null またはオブジェクトではありません。』というエラーが出ることがあります。
たまにというのはずいぶんと控えめな表現で、リロードしたりページ切替えしたりしていると、2、3回に1回くらいの頻度でこのエラーが出て、画像が切り替わらないということになります。(私の環境では)
FirefoxやChromeでは相当激しくそうやってもならないので、「IEってバカなのね」で済ましてもいいんですが、まだまだ50%以上のシェアをもつブラウザを無視すると、あとで痛い目にあうのはこっちなので、なんとか対処しなければ。
エラーが発生するのは、http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js の中なので、これを見てみるとって、パックされたソースを見るのは嫌!ということで、http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js に置き変えてみたところ、ピタッとエラーが止まりました。
そういうことなんですね。
EC-CUBE:エラー対応(タイムアウト)
EC-CUBEさっきの記事でもちょこっと書いたんですが、「月度で集計する」をやったら、30秒タイムアウトにひっかかった件が未解決でした。これもほっておけないので、対処しておきます。
エラーメッセージはこんな感じ。
対応は次の3つらしいです。
max_execution_time = 90
php_value max_execution_time 90
set_time_limit(90);
今回は限定的な対応なので、3のPHPソースの先頭に set_time_limit() を入れる方法で対処しました。
しかし、TOPで見ると売上集計が動き出すと、CPUがあっという間に 100%近くに張り付いて気持ち悪いこと。nice とかかませる方法はないのかしらん。(売上集計ごときはもう少し遠慮して動いてほしいものです)
EC-CUBE:エラー対応
EC-CUBEお仕事で EC-CUBEのカスタマイズをやっていて(いろんなことをやってますよね)、いままで触ったこともなかった「売上集計」を動かしてみたらエラーが出たので、その対応について少しメモ。(きっと誰かの役に立つと思うので)
最初、「月度で集計する」をやったら、30秒タイムアウトにひっかかって、「期間で集計する」をやってみたら出たエラーがこれです。
ググってみてみたら『PHP がバンドル版の GD で構築されていないからではないか?』などというひやっとするようなことが書いてあって(PHPを使っているのは EC-CUBEだけじゃないので、いまさら CONFIGを変えてコンパイルし直すなんてこと、怖くてできない!)、そんなぁと思いつつ、ほかも調べてたら、GDがバンドル版じゃなかったら、そもそも Warningじゃなくて Fatal errorになるんじゃないかと。
で、エラーメッセージに立ち戻ってみると、No character set found とあるので、キャラクターセットがないと言ってるんだなと。
どうやら、EC-CUBEに標準で付いてくる wlmaru20044.ttf というやつがマズイようなので、IPAのページから最新の「IPAexフォント」をダウンロードして、wlmaru20044.ttfのあるフォント・ディレクトリ(/hoge/data/fonts/)に突っ込んでやります。
そして、エラーの出てるファイル(SC_GraphBase.php)のデファインを IPAexフォントに変えて、わざわざ EUC-JPにしてるところをコメントアウトして、元のUTF-8をいかせばOKです。
EUC-JPをそのままにしておくと、日本語が化け化けになります。
しかし、なんで EC-CUBEは wlmaru20044.ttf なんかを同梱してるんだろうか?
ライセンスの関係で IPAフォントがバンドルできないのかな?(ライセンスをざっと読んだ限りではそんな制限に引っ掛かるように思えないんだけど)