[PHP-users 12594] Re: 〔関連〕ファイルアップロード時にファイル名が正しく扱えない問題

NAKAMURA Takeshi php-users@php.gr.jp
Fri, 17 Jan 2003 18:55:54 +0900


仲村です。

From: keiko sakamoto <sakamoto@optsp.co.jp>
Date: Fri, 17 Jan 2003 17:23:29 +0900
Subject: [PHP-users 12589] Re: 〔関連〕ファイルアップロード時にファイル名が正しく扱えない問題

> 仲村さんの回答で、ファイルアップロードにより、フルパスを取得できるのであれば
> 作成頂いたmb__basename()を使用できると思うのですが、
> 以下のソースで$_POST['postfile']でファイル名のフルパスが取得できません。

 multipart だと、取れないんですね。それは気づきませんでした。

> C:\test\サンプル\test.txt
> 		↓ ↓ ↓
> C:\test\サンプル\\test.txt
>
> という風に文字化けしてしまい、
> ファイル名がサンプル\\test.txtになっていると考えられます。

 それは、PHPが送られてきた文字コードを勘違いしているからなのでしょう。
私の環境では以下のスクリプトにクライアント(IE6, Mozilla1.3a(ともにWin2K))
から「C:\test\サンプル\test.txt」を与えたところ正常に「test.txt」と表示
されました。(これが、期待される動作ですよね?)

<form enctype="multipart/form-data" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="100000">
  <input type="file" name="postfile"  size="90" class="uploadText">
  <input type="submit" value="送信">  </form>
<?php  echo mb_convert_encoding($_FILES['postfile']['name'],
       "EUC-JP", 'eucjp-win, sjis-win, JIS');                  ?>

> 以下の設定を変更すれば回避できるのでしょうか。
>>(略 私のphp.ini)

 私も、あまり使い込んでいないので 関係有りそうなところを挙げてみた訳です。
 マニュアルに載っている推奨設定ですから、バックアップを取って試してみては
如何でしょうか。

> そもそもアップロードに関しては
> $_FILES[]で値を取得するので、
> POSTは使わない方がよいと考えているのですが…

 そうですね、multipart だと $_POST に値が入らないし
 http://jp2.php.net/manual/ja/features.file-upload.php
にも、$_FILES で書いてありますから $_FILES が推奨のようですね。
勉強になります。

> フォルダ名、ファイル名に日本語を使用しない様にする方が無難ですかね?
 私の所では、うまく動いているので環境によるのでしょう。
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+
 関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
 仲村 武 <1yen@sh.rim.or.jp>