[PHP-users 2390] 日本語ファイル名のアップロードについて
瀬上 孝司
php-users@php.gr.jp
Tue, 2 Oct 2001 16:34:21 +0900
マイクロ・シー・エー・デーの瀬上と申します。
表題どおり、日本語ファイル名をアップロードする際、うまくいかない
ときがあり、困っています。具体的にいうと、ファイル名に0x5cを含む
(SJISの)「ソ」「表」「申」などの漢字があると、その部分で切られて
しまい、ちゃんとファイル名が渡らなくなってしまうのです。
下記に、簡単なサンプルPHPソースを作成してみました。
このPHPファイルを実行し、例えば対象ファイルに(SJISで)
C:\temp\ABC表1.xls
を入力しsubmitすると、変数$uploadFile_nameには、
1.xls
しか設定されないのがわかると思います。
たぶん、ディレクトリの区切りと勘違いしているのでしょう。
これを回避する方法はなにかあるでしょうか?
実行環境は変更することはできないので、それ以外の方法でなにか
回避方法があれば教えてください。
php.iniのmagic_quotes_gpcオプションをOnにしてもだめでした。
よろしくお願いします。
●環境
OS: Windows 2000 SP1
Webサーバ: Microsoft IIS
PHP: php-4.0.7-dev (on http://www.php4win.de)
extensions: bz2, ldap, mbstring, oci8, openssl, pdf, pgsql
●php.iniの一部
[PHP]
magic_quotes_gpc = Off ; Onにしてもダメ
[MBString]
mbstring.detect_order = auto
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.internal_encoding = UTF-8
mbstring.substitute_character = none
--- uploadtest.php ---
<HTML>
<HEAD>
<TITLE>アップロードテスト</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">
</HEAD>
<BODY>
<FONT SIZE=6>アップロードテスト</FONT><BR>
<?PHP
if (isset($action)) {
if ($uploadFile!="none") {
$upload_dir = "D:/temp/";
echo "<P><BR>つぎのファイルをアップロードしました";
$len = strlen($uploadFile_name);
echo "<BR>len = ".$len;
echo "<BR>";
for ($i = 0; $i < $len; $i++) {
$c = substr($uploadFile_name,$i,1);
echo "0x".bin2hex($c)." ";
}
echo "<BR>";
echo "<UL>\n";
echo "<LI><B>".$uploadFile_name."</B> ";
if (copy($uploadFile, $upload_dir.$uploadFile_name)) {
echo "( ".$uploadFile_size." bytes )\n";
}
else {
echo "<FONT COLOR=#ff0000>コピーに失敗</FONT>\n";
}
}
}
?>
<FORM ENCTYPE="multipart/form-data" METHOD=post ACTION="uploadtest.php">
<INPUT TYPE=hidden NAME=MAX_FILE_SIZE VALUE=2048000>
<TABLE>
<TR>
<TD>対象ファイル</TD>
<TD><INPUT TYPE=file NAME=uploadFile SIZE=80></TD>
</TR>
<TR>
<TD ALIGN=center COLSPAN=2>
<INPUT TYPE=submit NAME=action VALUE="アップロード">
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
--------------------------
--
瀬上 孝司 / Segami, Takashi <sage@tokyo.microcad.co.jp>
株式会社マイクロ・シー・エー・デー 第2システム開発室
TEL: 03-5820-8912, URL: http://www.microcad.co.jp/