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() がうまく動いていないのか、「同じ名前の関数がありまっせ」ってことらしい。面倒くさいのでとりあえずコメントアウトして解決。

[bash title=”pulgins/compatibility/includes/1.5.2/global.php” firstline=”721″ highlight=”723,755″]
// 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;

}
}
コメントアウト */
[/bash]

カテゴリー: IT・インターネット, linux   タグ: , , , ,   この投稿のパーマリンク

コメントを残す

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