を超える非常に大きなバイナリファイルを提供し、我々が使用しているPerlのCGIスクリプトの元のコードです。非常に大きなファイルであっても、動作しているようですが、本当に巨大なファイルではありません。次のコードHTTP
現在のコードは次のようになります。
$files_location = $c->{target_dir}.'/'.$ID;
open(DLFILE, "<$files_location") || Error('open', 'file');
@fileholder = <DLFILE>;
close (DLFILE) || Error ('close', 'file');
print "Content-Type:application/x-download\n";
print "Content-Disposition:attachment;filename=$name\n\n";
print @fileholder;
binmode $DLFILE;
私はコードを正しく理解していれば、それは「印刷」する前にそれをメモリ内のファイル全体をロードしています。もちろん、ロードしてチャンクで表示するほうがずっと良いと思いますか?しかし、多くのフォーラムやチュートリアルを読んだ後、私はまだ、標準のPerlのライブラリで、最高のそれを行う方法がわからないです...
最後の質問は、なぜ最後に指定「のbinmode」とは?
おかげで任意のヒントやアドバイスをたくさん、
を扱う、中括弧を維持することを確認してください。この質問は密接なぜPerlで書かれた私のイメージのダウンロードCGIスクリプトが動作していない[に関連していますか? ](https://stackoverflow.com/q/10563275/100754)両方のコードがコピーされているように見える同じくそったチュートリアルサイトから。私のブログ記事[PerlのファイルダウンロードCGIスクリプト](https://www.nu42.com/2012/05/file-download-cgi-script-in-perl.html)も参照してください。質問。 2つの質問は、異なる理由で失敗しているため、正確な重複ではありません。 –
**「最後に指定された? 『のbinmodeは』理由です」** ...ので、彼らはどちらかやっていたかわからなかった他の誰かによって書かれたチュートリアルからコピーしたコードをやっていたかわからなかった誰か。実のところ、実際のファイルハンドルは 'DLFILE'なので、' binmode'ing '$ DLFILE'はどこに置かれても何もしません。人生の唯一の目的は、スクリプトを書いた無能な人が「厳格な」使用をしていないことを示すことです。 –
この*ばかげた* 14歳のスクリプト: 'https:// www.sitepoint.com/file-download-script-perl /' –