• 締切済み

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;

みんなの回答

回答No.1

テストしてないので、漏れてるかもしれないけど、 気になったことだけ・・・・ 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 :$!"); に変更。(ファイルの存在チェック)

take79vnjp
質問者

お礼

superside0さん。 問題を解決できました。ありがとうございました。

take79vnjp
質問者

補足

superside0さん。 早速ご回答して頂きありがとうございます。 指定の通りに直してみましたが、サーバーから"500 Internal Server Error”のエラーが表示されます。ファイルパーミッションを755を変更してみても変わらない。 open(FILE,$source) or die("error :$!"); をprintしている後に書くとダウンロードダイアローグが表示され、ダウンロードできますが、ファイルは0バイトです。 printしている前に書くと上記のエラーが出ます。

関連するQ&A