[PHP-users 23563] アップロードされたファイル名の取得

Kuma satoru_kumagai @ mjs.co.jp
2004年 11月 8日 (月) 14:58:52 JST


ファイルのアップロードについてご教授ください.

今回初めてファイルのアップロード処理を行っています.
環境
OS -> Win2000SV
Server -> Apache1.3.26
PHP -> 4.2.2

php.ini
[mbstring]
mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
mbstring.http_output = SJIS
;mbstring.detect_order = auto
;mbstring.substitute_character = none;

サンプルソース
<?php
if(!empty($_FILES['upfile']['name'])){
 echo "tmp_name = " . $_FILES['upfile']['tmp_name'] . "<br>";
 echo "name = "       . $_FILES['upfile']['name'] . "<br>";
 echo "size = "         . $_FILES['upfile']['size'] . "<br>";
 echo "type = "        . $_FILES['upfile']['type'] . "<br>";
}else{
?>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE></TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<form enctype="multipart/form-data" 
action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="2048000">
ファイル<input type="file" name="upfile" size="30">
<input type="submit" value="アップロード">
</form>
</BODY>
</HTML>
<?php
}
?>

上記の環境でテストしているのですが,$_FILES['upfile']['name'] で
クライアント元のファイル名を取得すると,拡張子だけが表示され,
ファイル名の部分が取得できません.
ファイル名に日本語が含まれていない場合には,問題なく全ての
情報が取得できているのですが,日本語を含んだ場合,文字化する
以前に,ファイル名そのものが取得できません.

mb_detect_encoding($_FILES['upfile']['name'] , "auto")を実行すると
ASCIIが返ってきます.

Googleで散々調べましたが,日本語が含まれていたら,その時点で
処理を中止する,またはエラーを表示する.という記事は見かけました.
日本語は無理なのでしょか?
mb_convert_encodingで,いろいろ試してもダメでした.

ご教授お願いします.




PHP-users メーリングリストの案内