[PHP-users 12678] Re: ファイルアップロードの処理方法について

しょうなり [ml] php-users@php.gr.jp
Mon, 20 Jan 2003 20:04:18 +0900


しょうなりです。

冨永さんのかかれたソースを実際にブラウザで確認して
チェックする時間が取れないので、その状態で返信するのも
惑わすだけかもしれませんが、何かの参考になればと思い
今回の仕様について感想を書きます。


冨永 圭祐 さんは書きました:
>(略)
>そのスクリプトが終了する前に
>COPYコマンドを使って、ファイルのコピーを行うことになるのですね。
>
>実際、私が処理をしたいのは
>|1から3のフォームの画面遷移についてですが、
>|毎回サーバーに送信され、PHPで処理され次のフォーム画面が出る、
>|ということでしょうか?
>
>というかたちになりますが
>2から3への値引き渡し(毎回サーバーに送信)する方法が
>いまいち分からないというのが現状です。

>1から2へは渡す方法は分かっています。実現できております。
>1→2(略)

2から3への処理内容ですが、4つ提案できるかと思います。
ただしどれも僕自身のチェックはしていません。
可能だと思うものに関して冨永さんのほうでチェックしていただければと
思います。


1)2→3の処理の際にもファイルアップロードをする。
 たぶんソースを読む限り冨永さんがなされようとしている方法だと思います。
 およそ次の通りにすれば実現できるのではないかと思いますが…

>フォーム2
<INPUT TYPE=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"10000000\">
<INPUT NAME=\"UserFile\" TYPE=\"file\" SIZE=32
 ACCEPT=\"image/jpeg,image/gif,image/txt\" value=".$fullpath_name.">

 上記の通り、TYPE="file" に、値として $fullpath_name も与えてあげます。
 そうすればファイルアップロードを再度させるよう指示できるのではないかと
 思います。
 ただ、この方法は2回ファイルをアップロードさせるわけですから、
 その分だけ通信量が増えますよね? WEB系開発者としてはお勧めできません。


2)1→2でファイルを受け取った際にどこかサーバーに保存しておき、
  2→3でアップロード確認ができれば、正式な場所へ移す。

 ファイルアップロードは1回で済みますが、
 2の画面でブラウザを閉じてしまった場合などを想定すると、
 サーバーに残った使わないことになったファイルはゴミですので、
 そのゴミ処理まで考えなければなりません。
 しかし、仕様の通り作ろうと思うと、こうするのが正しいと思います。


3)JavaScript を使ってよろしいみたいですので、
  1→2では、転送する画像のローカルのパスだけを送信し
  (つまりこの場合 $fullpath_name だけです)、
  2→3で正式にファイルを転送するようにします。

 2の画面で CSSも使って、
<span style="display:none"><!-- CSS で画面表示しないと設定する -->
<INPUT NAME=\"UserFile\" TYPE=\"file\" SIZE=32
 ACCEPT=\"image/jpeg,image/gif,image/txt\" value=".$fullpath_name.">
</span>
とすれば、ファイル送信を隠し属性っぽく使えるかもしれません。
(画面表示させてませんので、送信できないかもしれません。試してません)


4)2段階送信を諦め、JavaScriptによる画像の確認に仕様を変える。
 仕様を変えるのは難しいかと思いますが、上記1)2)を実現するのは
 HTTP と PHP の仕様的に難しいため、こちらを提案してみてはどうでしょうか?
 [PHP-users 12597] の井上さんの発言を参考にすれば、
 アップロードするファイルを選択した途端に画像の確認ができるようです。


試してない方法ばかり投稿してすいません。
もしできれば、試した方法と成功/失敗を報告していただければ、
今後MLを利用される方々の参考になると思いますので、
よろしくお願いします。

ちなみに、返信で全文引用はあまり好まれませんので、お控えください。


-- 
print <<<SIGNATURE
	しょうなり@信州 肥田昌也
	Email:     shounari@webappli.jp
	HomePage:  http://www.webappli.jp/ => JSlayout 評価版
SIGNATURE;