電子書籍の厳選無料作品が豊富!

use CGI qw(:standard);
use File::Basename;
$upimg1_pm = param('upimg1');

while (read($upimg1_pm, $buffer, 2048)) { $file .= $buffer; }
$FileName = basename($upimg1_pm, "");
open UP,"> $img_dir/$FileName";
binmode UP;
print UP $file;
close UP;
上のようにファイルのアップロードのプログラムを書いたのですが、実際アップロードしたら
C:\Documents and Settings\~top.gif
のようにWindowsのローカルパスがそのままファイル名としてアップロードされてしまいました。
basenameはファイル名をとるモジュールときいていたのですがなぜこうなるのでしょうか?
おそれいりますがご教授おねがいします。
もしかしてFile::Basename;のモジュールがないとか・・・
Perl5です。

A 回答 (2件)

basenameでの解析はOS/ファイル仕様に左右されます。


windows以外のOSで使用すればWindowsの規則で書かれたファイル名はうまく解析できないでしょう。

これは basename使用前に
fileparse_set_fstype( ファイル仕様 );
を呼んでおく事で動作しているOSによらず目的のファイル仕様を解析できます。

basename fileparse_set_fstype で検索すると詳しい解説がみつかるかも。
    • good
    • 0
この回答へのお礼

なるほど、ではファイル名はあらかじめ決めておく方がいいのですね。

お礼日時:2006/02/17 00:00

File::Basenameは、perlが動作しているOSのパス名に合わせて解析しているために、OSの種類を指定する必要があります。

basename()を使用する前に
fileparse_set_fstype("MSWin32");
を指定してやれば、期待した動きをしてくれると思いますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!