弊社でお受けしているホームページ制作にもれなくついてくる SEO対策について、きちんとまとめたページを作ろう作ろうと思いつつ、日々の制作に追われていっこうにページができないので、とりあえず、こういうことをやってますよということを技術的な観点からまとめておきます。
 
さらに読む

なんかの雑誌みたいな見出しですが、EC-CUBEのインストールをしようとして、PostgreSQLのリモート接続ではじかれたので、対処法をメモ。
インストールのDB設定のところでこんなエラーが出たわけです。

DB Error:
[nativecode=pg_connect() [function.pg-connect]:
Unable to connect to PostgreSQL server: could not connect to server:
Connection refused Is the server running on host "192.168.1.xxx" and accepting TCP/IP connections on port 5432?

TCP/IP接続が許可されてねーんじゃないのということです。
EC-CUBEは、ひとつ前のバージョンをインストールしてるんですけど、どーやってインストールしたんですかね?
 
ググるとここ(質問 > その他 > PostgreSQLでUNIXドメインソケット接続での使用は可能か)にそれらしいことが書いてありました。
ここでは、EC-CUBEのインストーラの方にパッチをあててますけど、今回は真っ当に PostgreSQLの方をリモート接続できるようにしてみます。
 
さらにググって、postgresql.conf と pg_hba.conf に設定を書けばいいということがわかったので、こんな風にしてみた。

# e postgresql.conf
listen_addresses = '192.168.1.3'

# e pg_hba.conf
host  all  all  192.168.1.0/24  trust

 
で、PostgreSQLをリスタートしたら、エラーで起動しないでやんの。

 * The PostgreSQL server failed to start. Please check the log output:
2010-07-03 12:39:31 JST LOG:  could not load root certificate file "root.crt": no SSL error reported
2010-07-03 12:39:31 JST DETAIL:  Will not verify client certificates.
2010-07-03 12:39:31 JST LOG:  could not bind IPv4 socket: Cannot assign requested address
2010-07-03 12:39:31 JST HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2010-07-03 12:39:31 JST WARNING:  could not create listen socket for "192.168.1.3"
2010-07-03 12:39:31 JST FATAL:  could not create any TCP/IP sockets

 
結局、listen_addresses = ‘*’ じゃないといけなかったみたい。なにが問題なんだろうか。動くようになったからいいけど。

# e postgresql.conf
listen_addresses = '*'

 
Nivo Slider の画面キャプションは、imgタグの title属性にキャプション文字列をセットして表示するようになっているんですが、改行文字を入れようとしてはまったのでメモ。
 
普通、title属性に改行を入れたいときは、このどちらかだとおもいます。



<br />

WordPressだと、前者は無視され、BRは改行はするんですが、文字列終わりにゴミが付きます。

&lt;img src=&quot;test.jpg&quot; title=&quot;TEST<br />test" /&gt;

TEST
test" /&gt;

こんな感じになるわけです。apply_filtersが余計なことをしてるんじゃないかなという気がフツフツと湧いてきていますが、ここに手を入れると大変そうなので、見なかったことにして、とりあえず何とかしてみます。

$p = get_the_content();
$p = apply_filters('the_content', $p);
$p = str_replace('|BR|', '<br />', $p);
echo $p;

the_content()の代わりに get_the_content()を使って、自分で決めた改行コード(|BR|)を変換してるだけです。
やっぱり、apply_filters をちゃんと直すべきですね。(でも、WordPress3.0になったら直ってるかもしれない)

 
Nivo 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 に置き変えてみたところ、ピタッとエラーが止まりました。
 
そういうことなんですね。

さっきの記事でもちょこっと書いたんですが、「月度で集計する」をやったら、30秒タイムアウトにひっかかった件が未解決でした。これもほっておけないので、対処しておきます。
エラーメッセージはこんな感じ。

/*
*/
Fatal error: Maximum execution time of 30 seconds exceeded

 
対応は次の3つらしいです。

  1. php.ini
    max_execution_time = 90
  2. httpd.conf or .htaccess
    php_value max_execution_time 90
  3. PHPファイル
    set_time_limit(90);

 
今回は限定的な対応なので、3のPHPソースの先頭に set_time_limit() を入れる方法で対処しました。
しかし、TOPで見ると売上集計が動き出すと、CPUがあっという間に 100%近くに張り付いて気持ち悪いこと。nice とかかませる方法はないのかしらん。(売上集計ごときはもう少し遠慮して動いてほしいものです)

お仕事で 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-&gt;image, $font_size, $angle, $left, $top + $font_size, $color, FONT_PATH, $text);
        } else {
            ImageTTFText($this-&gt;image, $font_size, $angle, $left, $top + $font_size, $this-&gt;text_color, FONT_PATH, $text);
        }

EUC-JPをそのままにしておくと、日本語が化け化けになります。
しかし、なんで EC-CUBEは wlmaru20044.ttf なんかを同梱してるんだろうか?
ライセンスの関係で IPAフォントがバンドルできないのかな?(ライセンスをざっと読んだ限りではそんな制限に引っ掛かるように思えないんだけど)