各キャリアの画像保存・転送制限の設定方法をまとめてみました    

2008/6/30 月曜日 matsui Posted in PHP, 全キャリア対応 No Comments »

今回は各キャリア・各フォーマット毎に、転送制限画像の作り方をまとめてみました。

ケータイでは、待ち受け画像などで使うために、ダウンロードした画像を再配布させないための、保存制限や転送制限を行うことができます。
転送制限をかけた画像は、メールへの添付や、SDカードへの保存が行えなくなります。
保存制限をかけた場合は、保存すらできません。

Windows用のフリーウェアなどには、転送制限を行わせないための情報を埋め込むソフトがあったりするのですが、CMSの管理画面からのアップロードや、メール添付による画像アップロードなど、サーバ上で動的に画像を生成しなければならないケースも多いと思いますので、PHPを使ったサンプル(とは言ってもコマンドを叩いているだけですが)でまとめてみることにします。

 

まず、概要を表にまとめると次の通りです。

キャリア
転送禁止
[jpg]
転送禁止
[gif]
転送禁止
[png]
保存禁止
[共通]
ドコモ コメント追加 *1 コメント追加 *1 そもそも表示不可 保存禁止は不可能
au コメント追加 *1 コメント追加 *1 コメント追加 *2 imgタグに属性追加 *3
SoftBank ヘッダ出力 *4 ヘッダ出力 *4 ヘッダ出力 *4 ヘッダ出力 *5

 

*1 : ドコモ、auのjpg, gifを転送禁止にする方法

画像のヘッダ部分にコメントを入れます。
ドコモであれば「copy="NO"'」、auであれば「kddi_copyright=on」を入れてあげればOKです。
両対応にする場合は、カンマで続けて書けば大丈夫ですが、auは先頭に文字列がある必要がありますので、こちらを先に書き、「kddi_copyright=on,copy="NO"」のようにします。

PHPから処理する場合は次の通りです。
※ImageMagickのコマンド「mogrify」がインストールされている必要があります。

$cmd = "mogrify -comment 'kddi_copyright=on,copy=\"NO\"' test.jpg";
$res = system($cmd);

 

*2 : auのPNG画像を転送禁止にする方法

auのPNGを転送禁止にするには、画像のCopyrightキーワードの部分に「kddi_copyright=on」を埋め込んでやればOKとのことです。

ImageMagickを使った方法が良くわからなかったため、次のソフトを使いました。
(※方法をご存じの方教えてください)

こちらの記事の下段の方に「imgcmt」というソフトが公開されています。
→ MODULE.JP imgcmt version 1.0.0 [module.jp]

次のようにコマンドを実行することで、うまくいきました。
PHPのsystem関数でも同様で行けると思います。

imgcmtpng Copyright kddi_copyright=on < test.png > test.png

 

*3 : auで画像を保存禁止にする方法

こちらは簡単です。imgタグにcopyright=yesという属性を付けてやればOKです。

<img src="test.png" copyright="yes" />

 

*4 : ソフトバンクで画像の転送を禁止する方法

.htaccessに次のように記載します。
(Apacheの「mod_headers」モジュールがインストールされている必要があります)

<FilesMatch "\.(jpg|gif|png)$">
  Header append x-jphone-copyright no-transfer
  Header append x-jphone-copyright no-peripheral
</FilesMatch>

もうあまりアクセスは無いとは思いますが、J-Phone時代のC型端末の場合は、上記設定では対応できません。
C型端末に対応する場合は、画像の拡張子を変更することで転送を防ぐことができます。(「jpg → jpz」、「png → pnz」)

 

*5 : ソフトバンクで画像の保存を禁止する方法

同じく.htaccessに次のように記載します。

<FilesMatch "\.(jpg|gif|png)$">
  Header set x-jphone-copyright no-store
  Header append x-jphone-copyright no-transfer
  Header append x-jphone-copyright no-peripheral
</FilesMatch>

※公式サイトのPDF資料に、一部の端末ではno-storeが利用できないとありましたので、念のため3つを併記しました。

 

今回はImageMagickのコマンドを、system関数から叩くという方法を取っています。
他にも「MagickWand For PHP」を使った方法もあり、その例はウノウラボさんのブログに情報がありましたので、こちらを参照すると良いと思います。

→ ウノウラボ 携帯キャリアで画像を転送させない方法 [unoh.net]

 

上記ブログにもありますが、せっかく対策を行ってもケータイ以外からアクセスされては意味がありません。
IPアドレスによる制限をかけ、PCやWillcom、イーモバイルなどからのアクセスも遮断しましょう。

なお、これらの情報はまだ勉強中の段階のため、誤り等がありましたら、突っ込みをお願いいたします。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

第33回PHP勉強会で使用したスライド資料「モバイル版Googleマップのちょっと進んだ使い方」    

2008/5/26 月曜日 matsui Posted in PHP 1 Comment »

先日の「第33回PHP勉強会」に参加させていただいたのですが、その際の発表で使用したスライド資料を公開いたします。

なお、資料内で紹介しているサンプルはこちらからご覧になれます。

それぞれプログラムもあるのですが、出張の移動中に書いたのでソースがあまりキレイではないのと、ライブラリとして使えるように、現在リファクタリング中です。
近日中に公開する予定ですので、もう少々お待ちください。

なお、勉強会参加者のtwkさんが、早速ウィザードの日本語訳のページを作ってしまったそうです。
→ こちらです
GoogleStaticMapsAPIに慣れていない方にはとても便利だと思います。
ぜひ合わせてご利用されると良いのではないでしょうか。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

絵文字ライブラリ「sfPictogramMobilePlugin」がバージョンアップし、PEARパッケージ化されたようです    

2008/5/2 金曜日 matsui Posted in PHP, ソフト紹介 No Comments »

以前にご紹介した、symfony用の絵文字プラグイン「sfPictogramMobilePlugin」がバージョンアップされ、同時にPEARパッケージ化されたようです。

→ アシアルブログ 絵文字ライブラリをPEARパッケージ化&sfPictogramMobilePluginをバージョンアップしました。 [asial.co.jp]

 

上記ブログからダウンロードするか、下記のようにして直接インストールができます。

PEARのインストール

$ pear install http://blog.asial.co.jp/data/Text_Pictogram_Mobile-0.0.2.tgz

symfonyプラグインのインストール

$ symfony plugin-install http://blog.asial.co.jp/data/sfPictogramMobilePlugin-0.0.4.tgz

 

なお、今回から追加されたPEARパッケージの場合は、次のようにして利用できるようです。

require_once("Text/Pictogram/Mobile.php");
$picObject = Text_Pictogram_Mobile::factory($carrier, $type);

よくあるPEARパッケージと同じ使い方で大丈夫そうですね。

ただし、symfonyプラグインをベースにしている関係から、動作にはPHP5が必要なようです。
ブログを読む限り、PHP4への対応も検討されているようですので、期待したいですね。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

PHPでケータイのFlash対応・非対応を判定できる関数を作ってみました    

2008/3/18 火曜日 matsui Posted in Flash, PHP 2 Comments »

ケータイコンテンツでよくある処理に、Flash対応端末であればFlashを、非対応端末であれば画像を出すという処理があります。

今までは、定義ファイルやデータベース内にデータを持って、対応・非対応を判定していたのですが、設置等が面倒ですし、動作も遅いです。
今後発売されるほぼ全ての機種は、Flash対応端末となりそうな感じなので、判定処理をPHPで関数化してみました。

ご利用上の注意事項です。

  • 2008年3月18日時点での端末リストでテストしています
  • 今後はFlash非対応端末が出ないということ、端末の命名規則が大きく変わらないことを仮定しています
  • もしFlash非対応端末が出たり、命名規則を外れた端末が出た場合は、適宜プログラムを修正してください。

ソフトバンクの公式サイトにFlashへの対応状況が載っておらずよくわからないので、こちら [neu.co.jp]のページを参考にしてみました。

 

if (isEnableFlash($_SERVER['HTTP_USER_AGENT'])) {
    echo 'Flash対応';
} else {
    echo 'Flash非対応';
}

/**
 * Flash対応判定
 */
function isEnableFlash($agent)
{
    if (preg_match('/^J\\-PHONE|MOT\\-/', $agent)) {
        // J-PHONE, Vodafoneの一部
        return false;
    } elseif (preg_match('/^Vodafone/', $agent)) {
        // Vodafone
        if (preg_match('/SH|SHf|SE\\//', $agent)) {
            return true;
        } else {
            return false;
        }
    } elseif (preg_match('/^SoftBank/', $agent)) {
        // SoftBank
        if (preg_match('/\\/70[0-9]|805SC/', $agent)) {
            return false;
        } else {
            return true;
        }
    } elseif (preg_match('/^DoCoMo\\/1\\.0\\//', $agent)) {
        // DoCoMo mova
        if (preg_match('/[A-Z]{1,2}50[56]i/', $agent)) {
            // 505i, 506i
            return true;
        } else {
            return false;
        }
    } elseif (preg_match('/^DoCoMo\\/2\\.0\\ /', $agent)) {
        // DoCoMo FOMA
        if (preg_match('/[NP]200[12]|[FN]2051|210[12]V|N2701|NM850iG|
F880iES|N600i|L60[0-2]i/', $agent)) {  ※
            // FOMAの一部非対応機種
            return false;
        } else {
            return true;
        }
    } elseif (preg_match('/UP\\.Browser/', $agent)) {
        // au
        if(preg_match('/^KDDI/', $agent)) {
            // au(HTML-OK)
            if (preg_match('/KDDI\\-ST2[4-9]|CA2[78]|KC2[7-9]|SA29/'
, $agent)) {  ※
                return true;
            } elseif (preg_match('/KDDI\\-[A-Z]{2}2[1-9]|HI3[12]|
KC[3U]1/', $agent)) {  ※
                return false;
            } else {
                return true;
            }
        } else {
            // au(HDML-Only)
            return false;
        }
    } else {
        // その他PC等
        return true;
    }
}

※表示の関係で折り返している部分があります。実際には1行で記述してください。

本サイトのスペック一覧リストを通してテストしましたのでおそらく大丈夫だと思いますが、もし間違い等がありましたら、ぜひご指摘をお願いします。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加

ディノのblogに携帯向け「XHTMLを出力する場合に便利なPHPのパッチ」が公開されています    

2008/3/7 金曜日 matsui Posted in PHP No Comments »

ディノオープンラボラトリのブログに「XHTMLを出力する場合に便利なPHPのパッチ」というものが公開されています。

→ ディノオープンラボラトリ 携帯向けXHTMLを出力する場合に便利なPHPのパッチ [dino.co.jp]

 

ドコモ端末でCSSを表示するには、Content-Typeが「application/xhtml+xml」でなくてはなりません。

通常通りではCSSが有効にならないため、PHPのプログラム上で、

header("Content-type: application/xhtml+xml");

と書いたり、

.htaccessで

AddType application/xhtml+xml .html

と指定したりします。

しかしながら上記の方法では、mb_output_handler関数による文字エンコーディング変換が効かないとのことです。
mb_output_handlerの仕様で、「Content-Type: text/*」の場合しか変換をかけていないようです。

今回ご紹介したパッチはこれを回避するためのものです。
パッチはPHP5.2.5用の物のようですが、修正箇所が少ないため、少しソースを読めば他のバージョンでも適用することができそうです。
またPHP自体にパッチを当てているため、動作スピードも早いと思われます。

XHTML+mb_output_handlerでお困りの方は、ぜひ試してみるとよいと思います。

 

関連:

このエントリーを含むはてなブックマーク はてなブックマークに追加