画像ファイルパス名でのログファイルへの書き込み
CGI勉強中です。Kentさんのトピックスボードのサブルーチンを参考にさせていただいていますが、画像ファイル名パスのログファイルへの書き込みが、
<>画像拡張子<>横サイズ<>縦サイズ<>・・・・省略
<>.gif<>100<>100・・・・・・省略
なのですが、上の画像拡張子のみ書き込みされている部分を画像ファイルパス+ファイル名+拡張子という具合にログファイルへ書き込むにはどのようにしたらよいのでしょうか?アドバイス願います。
参考までにkentさんのサブルーチン
sub upload {
local($no) = @_;
local($tail,$fnam,$macbin,$f,$i,$flag,$imgfile,
$upfile,$length,$W,$H,$W2,$H2,@tail,@fnam,@name,@upfile);
# 画像処理
$macbin=0;
@tail=();
@fnam=();
@name=();
foreach (@in) {
if (/(.*)Content-type:(.*)/i) {
$tail = $2;
$tail =~ s/\r//g;
$tail =~ s/\n//g;
push(@tail,$tail);
}
if (/.*name=\"(.*)\";.*filename=\"(.*)\"/i) {
$fnam = $2;
$fnam =~ s/\r//g;
$fnam =~ s/\n//g;
push(@fnam,$fnam);
push(@name,$1);
}
if (/application\/x-macbinary/i) { $macbin=1; }
}
# ファイル形式を認識
$f=0;
$i=0;
@upfile=();
foreach (0 .. $#tail) {
$i++;
$flag=0;
if ($tail[$_] =~ /image\/gif/i) { $tail=".gif"; $flag=1; }
elsif ($tail[$_] =~ /image\/jpeg/i) { $tail=".jpg"; $flag=1; }
elsif ($tail[$_] =~ /image\/x-png/i) { $tail=".png"; $flag=1; }
if (!$flag) {
if ($fnam[$_] =~ /\.gif$/i) { $tail=".gif"; $flag=1; }
elsif ($fnam[$_] =~ /\.jpe?g$/i) { $tail=".jpg"; $flag=1; }
elsif ($fnam[$_] =~ /\.png$/i) { $tail=".png"; $flag=1; }
}
if ($name[$_] eq "upfile$i") {
$upfile = $in{"upfile$i"};
$imgfile = "$imgdir/$no-$i$tail";
}
# アップロード結果
if ($flag) { $f++; }
else { push(@upfile,("","","")); next; }
# マックバイナリ対策
if ($macbin) {
$length = substr($upfile,83,4);
$length = unpack("%N",$length);
$upfile = substr($upfile,128,$length);
}
# データ書込み
open(OUT,">$imgfile") || &error("画像アップ失敗");
binmode(OUT);
binmode(STDOUT);
print OUT $imgfile;
close(OUT);
chmod (0666,$imgfile);
# 画像サイズ取得
if ($tail eq ".jpg") { ($W, $H) = &j_size($imgfile); }
elsif ($tail eq ".gif") { ($W, $H) = &g_size($imgfile); }
elsif ($tail eq ".png") { ($W, $H) = &p_size($imgfile); }
# 画像表示縮小
if ($W > $MaxW || $H > $MaxH) {
$W2 = $MaxW / $W;
$H2 = $MaxH / $H;
if ($W2 < $H2) { $key = $W2; }
else { $key = $H2; }
$W = int ($W * $key) || 1;
$H = int ($H * $key) || 1;
}
push(@upfile,($tail,$W,$H));
}
return @upfile;
}