PHPで拡張子を出し分けし、携帯全機種で画像を表示する方法
Tweet
ケータイサイトを開発する上でやっかいな問題の一つに、キャリアや機種によって表示できない画像フォーマットがあるという点があります。
今回ご紹介するのは、機種によって画像の拡張子を置き換え、全ての端末で画像を正しく表示するためのPHPサンプルプログラムです。
あくまで拡張子を置換するだけですので、あらかじめ画像をアップロードする際に、「JPG」「GIF」「PNG」と3種類の画像を設置する必要があります。
ユーザエージェントで画像の拡張子を置換するサンプルプログラム
// 対象となる画像ファイル名をセット
$filename = 'testimage.jpg';
// 拡張子を取得
$ext = substr($filename, -4);
// ユーザエージェントの取得
$agent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/^DoCoMo/', $agent)) {
// DoCoMoの場合
if ('.png' == $ext) {
// 「.png」→「.gif」に置換
$ext = '.gif';
} elseif ('.jpg' == $ext) {
$nglist = '501i|502i|821i|209i|651i|691i|671i|210i
|F503i|SO503i|D503i|F211i|D211i'; // ※実際には1行で入力
$pattern = "/^DoCoMo\\/1\\.0\\/.*($nglist)/";
if (preg_match($pattern, $agent)) {
// 「.jpg」→「.gif」に置換
$ext = '.gif';
}
}
} elseif (preg_match('/^J-PHONE/', $agent)) {
// ソフトバンク3G以前の場合
if ('.gif' == $ext) {
// 「.gif」→「.png」に置換
$ext = '.png';
}
}
// 出力
echo substr($filename, 0, -4) . $ext;
※表示の都合上、改行をいれています
次のルールで置換を行っています。
- ドコモはPNGを表示できないため「.gif」に置換
- ドコモのJPG非対応機種は「.gif」に置換
- ソフトバンクの3G以前の機種はGIFを表示できないため「.png」に置換
厳密な機種判定を行っているわけではないので、多少ルーズな処理ですが、ひとまずこれで「画像が表示されない」というケースは避けることができるはずです。
関連:
最近の記事