C01:CGIからDoCoMo携帯用着メロをダウンロードさせる

CGIで携帯電話の着信メロディをダウンロードできるようにしたい場合もあると思います。
今回は、DoCoMo携帯用着メロをダウンロードさせるようなCGIを紹介します。
知っていれば単純な方法なのですが、インターネット上に出回っている情報が少なく、探すのに苦労する人もいると思いますので紹介します。

ファイルを開く

解説
#!/usr/local/bin/perl
プロバイダがPerlを置いている場所を記述します。
ここでは/usr/local/bin/perlにあるとしています。
$sound="sound.mld";
着メロは拡張子が.mldのファイルになります。
ここでは$soundという変数に代入しています。
$size = -s $sound;
open(IN, $sound);
binmode(IN);
read(IN, $buf, $size);
close(IN);
ファイルからデータを読み込んでいます。
バイナリデータなのでbinmode(IN)を書いています。
printf("Content-type:application/x-mld\n");
printf("Content-length:$size\n\n");
拡張子が.mldというファイルのContent-typeはapplication/x-mldになります。
着メロに限らず携帯電話にデータを出力する時はファイルサイズをContent-lengthで出力する必要があります。
これで着メロがダウンロードされるはずですが、もう一つ裏技を書いておきます。
拡張子が.mldというファイルのContent-typeがapplication/x-mldだという事を知らなかった時に試した方法なのですが、CGIにリンクを貼る時にURLの後ろに?tmp=.mldという文字列を付けます。
こうするとURLの最後が.mldになるので、これをファイルの拡張子と判断してくれる場合があるようです。
URLの?以降はデータ扱いで特に悪影響は与えないので、念の為に書いておくといいかも知れません。
☆今回のポイント☆
携帯電話への出力方法を覚えよう!
binmode(STDOUT);
print $buf;
データを出力しています。
バイナリデータなのでbinmode(STDOUT)を書いています。
exit;
プログラムを終了させます。