cgi(perl)でアップロードされたファイルを保存する方法について
ファイルをアップロードするフォーム"form.html"(method="POST" action="/cgi-bin/form.cgi")を書きました。
ファイルを保存する方法について疑問があるので教えて下さい。
http://www.ss.iij4u.or.jp/~somali/web/_perl_upload.html
上記URLを参考にしました。
下記の変数"$filename"には、アップロードしたファイル名(image.jpgなど)が入っています。
(アップロードされたファイル名と保存するファイル名を同じにしました。)
#------------------------------------------------------------
open (OUT, ">$filename") || die "cannot open";
binmode (OUT);
$i=1;#ループ回数とアップロードされたファイルのサイズの比較の為。
while(read($filename, $buffer, 1024)){
print OUT $buffer;
$i++;
}
close (OUT);
close ($filename) if ($CGI::OS ne 'UNIX'); # Windowsプラットフォーム用
print "whileループの数: $i<BR>";
#------------------------------------------------------------
while文について。
while(read($filename, $buffer, 1024)){
print OUT $buffer;
上記の2行は、1024バイトづつ$filename(アップロードしたファイル名)から読み込み、$bufferに格納。
$bufferに格納されたデータをOUTで指定した部分に書き込む、そしてそれを繰り返す。
こう理解していますが間違いないでしょうか?
ファイルサイズが予想できれば、whlie文を使わずに
read($filename,$temp,10000);
print OUT $temp;
このようにしても問題ありませんか?
read関数について教えて下さい。
書籍などには、
read(FILEHANDLE,$data,1024);
こう書いてありますが、上記例でFILEHANDLEを変数名$filenameにしても問題なく動作しました。
FILEHANDLEでなく、変数$filenameでも問題無いのでしょうか?
FILEHANDLEと$filenameは何を示しているんですか?
ファイルの先頭アドレスでしょうか?
$filenameにはアップロードしたファイル名が入っているのにどうして動くのだろうと疑問に思っています。
乱文で申し訳ありませんがご教授下さい。
宜しくお願い致します。
お礼
なるほど。勉強になりました!