- 締切済み
CGI経由でのPDFファイルをダウンロード
こんにちは。 CGIの初心者です。 今CGI経由でのPDFファイルをダウンロードするというプログラムを作っています。 ただ、ダウンロードしたファイルは開けなく、エラーが出ます。ファイルを確認すると0バイトです。原因はよく分からないので、誰かが教えてください。ありがとうございます。 コードです: $filename = './data/sheet.pdf'; $source = $filename ; print qq|Content-type: text/plain\n|; print qq|Content-Disposition: attachment; filename="$filename"\n|; print qq|\n|; #-- ファイルを読み込んで出力 open(FILE,"$source"); binmode FILE; binmode STDOUT; while(read(FILE, $value, 4096)){ print $value; } close FILE;
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- superside0
- ベストアンサー率64% (461/711)
テストしてないので、漏れてるかもしれないけど、 気になったことだけ・・・・ 1) Content-type: text/plain ↓ Content-type:application/pdf 2) Content-Disposition: attachment; filename="$filename" の$filenameはパス('./data/')を含まない、ファイル名('sheet.pdf')のみに。 3) open(FILE,$source); をヘッダを printしている前にもってきて open(FILE,$source) or die("error :$!"); に変更。(ファイルの存在チェック)
お礼
superside0さん。 問題を解決できました。ありがとうございました。
補足
superside0さん。 早速ご回答して頂きありがとうございます。 指定の通りに直してみましたが、サーバーから"500 Internal Server Error”のエラーが表示されます。ファイルパーミッションを755を変更してみても変わらない。 open(FILE,$source) or die("error :$!"); をprintしている後に書くとダウンロードダイアローグが表示され、ダウンロードできますが、ファイルは0バイトです。 printしている前に書くと上記のエラーが出ます。