アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
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;

A 回答 (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 :$!");
に変更。(ファイルの存在チェック)

この回答への補足

superside0さん。

早速ご回答して頂きありがとうございます。

指定の通りに直してみましたが、サーバーから"500 Internal Server Error”のエラーが表示されます。ファイルパーミッションを755を変更してみても変わらない。

open(FILE,$source) or die("error :$!");
をprintしている後に書くとダウンロードダイアローグが表示され、ダウンロードできますが、ファイルは0バイトです。
printしている前に書くと上記のエラーが出ます。

補足日時:2012/02/15 10:26
    • good
    • 0
この回答へのお礼

superside0さん。

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

お礼日時:2012/02/15 14:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!