• ベストアンサー

バイナリファイルの出力

「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); -----------------------------------------------------------

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 print while (<IN>);   ↓  while (<IN>) { print; } に変えたらどうでしょう?

ohnotellme
質問者

お礼

ありがとうございました。 あれこれやっているウチにできるようになりました。 できなかった理由が今もって不明なのですが・・・

その他の回答 (1)

回答No.2

こちらで試したところ(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を記録している部分にエラーが見つかりました)

ohnotellme
質問者

お礼

ありがとうございました。 あれこれやっているウチにできるようになりました。 できなかった理由が今もって不明なのですが・・・

関連するQ&A

専門家に質問してみよう