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;
上記の状態で行なっているのですが・・・。
謎が解けません。
どなたかご存知の方、教えてください。
宜しくお願いします。
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;}
> とでも書くとか。
ありがとうございました。
松元さんのおかげで、出来るようになりました。