SquirrelMail on PHP-5.4.5

出先で仕事のメールを確認したいというだけのために Squirrelmail を使っていたのだけれど、検証もかねて Scientific Linux 6.2 に移行したところ、動きがおかしくなってしまった。

メニューなどは日本語化されるのに、肝心なメールの内容がまったく表示されない。
ディレクトリごとコピしたものだし、ページ自体は表示されているのだから Apache 周りの問題じゃなさそうだし…そもそも日本語だけ表示されないって言うのは変。

で、探してみたところあっさり原因と対処がわかったのだけれど。

Webメールソフト SquirrelMail の PHP5.4対応

php の htmlspecialchars() をカスタマイズして自前に関数で置き換える、ってこと。自分の環境ではmb_comvert~ のところはいじらなくても日本語メールを表示できた。

ところが。途中までうまく動いていたが compatibility プラグインをインストールしたところで今度は phpエラー『Fatal error: Cannot redeclare』が発生した。

エラーを元に compatibility/includes/1.5.2/global.php に既に『sq_htmlspecialchars()』が定義されていた。function_exists() がうまく動いていないのか、「同じ名前の関数がありまっせ」ってことらしい。面倒くさいのでとりあえずコメントアウトして解決。

// since 1.5.2
//
/* コメントアウト
if (!function_exists('sq_htmlspecialchars'))
{
function sq_htmlspecialchars($value, $quote_style=ENT_QUOTES) {

    if ($quote_style === FALSE) $quote_style = ENT_QUOTES;

    // array?  go recursive...
    //
    if (is_array($value)) {
        $return_array = array();
        foreach ($value as $key => $val) {
            $return_array[sq_htmlspecialchars($key, $quote_style)]
                = sq_htmlspecialchars($val, $quote_style);
        }
        return $return_array;

    // sanitize strings only
    //
    } else if (is_string($value)) {
        if ($quote_style === TRUE)
            return str_replace(array('\'', '"'), array(''', '"'), $value        );
        else
            return htmlspecialchars($value, $quote_style);
    }

    // anything else gets returned with no changes
    //
    return $value;

}
}
コメントアウト */
カテゴリー: IT・インターネット, linux   タグ: , , , ,   この投稿のパーマリンク

コメントを残す

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