• 締切済み

画像ファイルパス名でのログファイルへの書き込み

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; }

みんなの回答

  • nerumako
  • ベストアンサー率84% (11/13)
回答No.1

はじめまして。 ざっと見た感じですが、 下から4行目 push(@upfile,($tail,$W,$H));  ↓変更 push(@upfile,($imgfile,$W,$H)); これで 「画像拡張子のみ書き込みされている部分を画像ファイルパス+ファイル名+拡張子で書き込み」されるのではないでしょうか。 試していないので解りません。 アドバイスと言いますかご参考まで。 このサブルーチンだけをご参考になされているようでしたら問題ないですが、同スクリプト内のほかのサブルーチンもご参考にされているようでしたら恐らく他にも修正箇所が出てくると思います。 「データフォーマットを変更」すると言うとは 「データを取り扱う処理部分全ての箇所」に対して変更してしまったフォーマットに合わせた形に修正しなければなりませんので十分注意が必要です。

関連するQ&A