• ベストアンサー

Perlで着メロDLカウント

Perlで着メロをダウンロードさせカウントするスクリプトを書いたのですが、 J-PHONEでmmfファイルをダウンロードすると「REP310 J-PHONEではページを表示できません」というエラーが出てDLできません。 2000サーバーでIISのMIMEは既に登録済みです。 また、DoCoMoのmldは問題なくDLできカウントできます。 スクリプトはHTTP_USER_AGENTとホストで判定し、 J-PHONEの場合はHTTP_X_JPHONE_SMAFで和音数を調べて、 カウントしてからLocationでファイルの絶対パスへ飛ばしてます。 ちなみに、ケータイに直でパスを入れるとダウンロードできます。

質問者が選んだベストアンサー

  • ベストアンサー
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.8

再度確認です。 -- ソース -- (カウント処理) open(IN,"hoge.mmf"); binmode IN; $src = join("",<IN>); close(IN); binmode STDOUT; print "Content-Type: application/x-smaf\n\n"; print $src; exit; __END__ で、 拡張子に .mmf を付けてアクセスして NG でしょうか? エラーコードも同じですか?

zxfgrhg
質問者

お礼

やりました。できました。 何が悪かったのかよくわかんなかったんですが、 とりあえず、間に合ったのでこれから調べます。 ご回答くださいました皆さん有難うございました。

その他の回答 (7)

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.7

あ、すみません。 肝心な事を忘れていました。 J-SKY って MIME だけでなく拡張子も見るんですよ。 その CGI のお尻に .mmf を付けてみてください。 例えば、 ~/mero.cgi?mefo.mmf ~/mero.cgi/mero.mmf みたいな感じです。 これ、何回ハマっても忘れてしまう... X-(

zxfgrhg
質問者

補足

ダミー拡張子ですね。 png画像とかもそうですよね。 それも試したんですが、どうにも動いてくれません…

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.6

> ソースをコピペ あー、Windows でしたら binmode の記述は必要ですよ。 それで再度試して頂けませんか?

zxfgrhg
質問者

補足

binmodeにした場合も試してましたがやっぱり変わらなかったです。

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.5

度々申し訳ありません。 最初の質問に IIS と書いてありましたね・・・ HTTPD に MIME を登録しても CGI で出力するヘッダは明示的にしてあげないとダメですよ。

zxfgrhg
質問者

補足

こちらこそ度々すいません。 そうなんです。IISです。 デーモンにもMIMEを登録して、CGIでヘッダを出力してもやっぱりできないです。

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.4

すみません、自己レスです。 > バイナリファイルなので open した時に join でくっつけているのですが。 これ、よく意味が解りませんね。 とりあえずバイナリファイルは改行は改行として扱わないフォーマットですので join("", <IN> ); としてデータを一つの変数内に代入してるだけです。 配列をまんま出力して問題なければそれでいいと思います。 binmode を使ってるという事は Windows なんでしょうか? 試してみよう・・・

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.3

mmfファイルのヘッダは Content-Type: application/x-smaf だと思うのですが・・・ それと、配列ってまんま出力していいんでしたっけ? バイナリファイルなので open した時に join でくっつけているのですが。 FreeBSD 4.4-RELEASE と Apache 1.3.27 の環境では問題なく動作してますよ。No.2 のソースで。

zxfgrhg
質問者

補足

ありがとうございます。 ソースをコピペしてファイルへのパス等変更して吐き出してみたんですけど、 やっぱりREP310のエラーメッセージです。 先程のソースでヘッダを変更してみてもやっぱりDLできませんでした。

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.2

そのCGIで直接mmfファイルを出力してはどうでしょう? (カウント処理) open(IN,"hoge.mmf"); $src = join('',<IN>); close(IN); print "Content-Type: application/x-smaf\n\n"; print $src; exit; ダメですか?

zxfgrhg
質問者

お礼

回答ありがとうございます。 open ML,$J_file; binmode ML; my @tmp = <ML>; close ML; binmode STDOUT; print "Content-disposition:attachment; filename=\"$J_file\"\n"; print "Content-type: application/octet-stream\n\n"; print @tmp; としてみたんですが、どうにもできないんですよね。 なんなんでしょうか?

zxfgrhg
質問者

補足

open ML,$J_file; binmode ML; my @tmp = <ML>; close ML; binmode STDOUT; print "Content-disposition:attachment; filename=\"$J_file\"\n"; print "Content-type: application/octet-stream\n\n"; print @tmp; として直接ファイルを吐かせてみたんですがうまくいきません。

  • so_blue
  • ベストアンサー率48% (50/104)
回答No.1

J-PHONEはLocationに制限があるようです。 ちょっと探せなかったですが、J-PHONEのサイトに 仕様が載っているかもしれません。

参考URL:
http://ponta.kit.to/doc/develop/
zxfgrhg
質問者

お礼

ご回答有難うございます。 参考サイトを見させて頂きました。 やっぱりLocation周りですか。 このヘッダを流してるのは一度なのですがその辺りももう少し調べてみます。

zxfgrhg
質問者

補足

J-PHONEの参考資料(PDFファイル)を読んだのですが、ここにはLocation等ヘッダに関するものやPerlなどプログラム関連の記述はありませんでした。

関連するQ&A