- ベストアンサー
バイナリファイルの出力
「test.dat」というファイルをブラウザから ダウロードさせるためにバイナリ出力をしたいのですが、 空ファイルばかりできて上手くいきません。 以下のようなコードなのですが、どこが悪いでしょうか? ご教授ください。お願いします。 症状:ブラウザからダウンロードすると、ファイル名は正しいが 空のファイルになっている 環境:perl 5.8.7 windows server2003 ----------------------------------------------------------- #!/usr/local/bin/perl print "Content-Disposition: attachment; filename=\"test.dat\"\n"; print "Content-Type: application/octet-stream\n\n"; open(IN, "test.dat"); binmode(IN); binmode(STDOUT); print while (<IN>); close(IN); -----------------------------------------------------------
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
print while (<IN>); ↓ while (<IN>) { print; } に変えたらどうでしょう?
その他の回答 (1)
- umasikajiro
- ベストアンサー率67% (545/803)
こちらで試したところ(WINXP+Apache/2.0.55 (Win32) PHP/5.1.4 ) 文法的には問題なさそうですが、、、 あとはfileの問題ではないかと思いますが? #!/usr/local/bin/perl $| = 1; $time=localtime(); print "Content-Disposition: attachment; filename=\"$time.dat\"\n"; print "Content-Type: application/octet-stream\n\n"; open(STDERR, ">&STDOUT"); $file='./test.dat'; open(IN,$file)||die print" $file が有りません -s $file の結果は= ".(-s $file) ."---"; こんなので試したらどうでしょ? fileが開けない場合、ダウンロードしたものを テキストエディタで開くとエラーメッセージと fileサイズが記入されていますので参考に、、、 どうしても駄目なら読み込みもとのfileを他のものに変えて試してください 過去に1回だけ、上記のようなスクリプトで確かにfileが実在し fileサイズも正しく表示されているのに、どうしても読めないfileが有り 別のfileに変えたら、問題なく読めるということがありました (ずっと後でスキャンディスクしたら、そのfileを記録している部分にエラーが見つかりました)
お礼
ありがとうございました。 あれこれやっているウチにできるようになりました。 できなかった理由が今もって不明なのですが・・・
お礼
ありがとうございました。 あれこれやっているウチにできるようになりました。 できなかった理由が今もって不明なのですが・・・