投稿日:2005年11月17日 作成鷹の巣

No.19838 CGIでのダウンロードしたファイルの中身がない。



CGIでのダウンロードしたファイルの中身がない。

No.19838 投稿時間:2005年11月17日(Thu) 11:02 投稿者名:初心者 URL:

たびたび教えてください。
以前、日本語ファイル名がダウンロードできないと質問を書かせて頂きました。
現在、日本語ファイル名でもダウンロード出来るようになったのですが、ダウンロードされたファイルの
中身がないという現象に陥っています。

# 指定ファイルの表示
print <<__EOF__;
Content-Disposition: attachment; filename=$filename
Content-Length: $size
Content-Type: application/octet-stream

__EOF__
open FILE, '<', "$dir/$filename" or die;
print while read FILE, $_, 1024;
close FILE;

上記の状態で行なっているのですが・・・。
謎が解けません。
どなたかご存知の方、教えてください。
宜しくお願いします。


自分で作ったCGIですか?

No.19839 投稿時間:2005年11月17日(Thu) 12:28 投稿者名:松元 URL:

初心者なんてHNは使わないこと。回答者に失礼です。

所で、自分で作ったCGIですか?
違うならまず作者へ問い合わせてください。
ここで公開するのもまずいかも知れません

自分で作ったのなら、デバッグ方法程度は確立しておく事。

眺めただけで言えば
open でエラーしているか $size にファイルサイズが入っていない
では?


絶対パスを指定しなくてはいけないのでしょうか?

No.19840 投稿時間:2005年11月17日(Thu) 12:44 投稿者名:福助 URL:

> 初心者なんてHNは使わないこと。回答者に失礼です。

失礼しました。

> 所で、自分で作ったCGIですか?
> 違うならまず作者へ問い合わせてください。
> ここで公開するのもまずいかも知れません

大元を作っていただいたのは作者の方がいらっしゃいます。
作者への連絡はしましたが、返信がないのでこちらの掲示板に書込みをさせて
頂きました。

> 自分で作ったのなら、デバッグ方法程度は確立しておく事。
>
> 眺めただけで言えば
> open でエラーしているか $size にファイルサイズが入っていない
> では?

$sizeには、print <<__EOF__の直前で代入しています。
これは、デバック文で確認済みです。
openエラーだとすると、相対パスではいけないと言うことなのでしょうか?
$dir/$filenameをデバックすると、CGIからのパス指定になります。
絶対パスを指定しなくてはいけないのでしょうか?


実行してみましたが問題ありません。

No.19841 投稿時間:2005年11月17日(Thu) 13:54 投稿者名:松元 URL:

私は実際にそれをペーストして実行してみましたが問題ありません。

if(!open ( FILE, '<', "$dir/$filename"))
{
print "Content-type: text/html\n\n";
print "cannot open filename= $dir/$filename size= $size ";
exit;
}
print <<__EOF__;
Content-Disposition: attachment; filename=$filename
Content-Length: $size
Content-Type: application/octet-stream

__EOF__
print while read FILE, $_, 1024;
close FILE;

と先にオープンすれば、オープンが悪いか分かります
さらに その前に
if( !$size ) { "Content-type: text/html\n\n size=zero"; exit;}
とでも書くとか。


出来るようになりました。

No.19843 投稿時間:2005年11月18日(Fri) 12:24 投稿者名:福助 URL:

> 私は実際にそれをペーストして実行してみましたが問題ありません。
>
> if(!open ( FILE, '<', "$dir/$filename"))
> {
> print "Content-type: text/html\n\n";
> print "cannot open filename= $dir/$filename size= $size ";
> exit;
> }
> print <<__EOF__;
> Content-Disposition: attachment; filename=$filename
> Content-Length: $size
> Content-Type: application/octet-stream
>
> __EOF__
> print while read FILE, $_, 1024;
> close FILE;
>
> と先にオープンすれば、オープンが悪いか分かります
> さらに その前に
> if( !$size ) { "Content-type: text/html\n\n size=zero"; exit;}
> とでも書くとか。


ありがとうございました。
松元さんのおかげで、出来るようになりました。


目次掲示板過去ログ目次▲頁先頭