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

現在下記のような処理を行なおうとしております。

a.php > 入力ページ
アップロードするファイルを選択します。

b.php > 確認ページ
アップロードするファイルのファイル名を表示します。

c.php > アップロードページ
a.phpで選択したファイルをアップロードします。

move_uploaded_fileで実現しようと思っているのですが、b.php → c.phpの
タイミングでa.phpで選択したファイルがテンポラリディレクトリから
削除されてしまうため、c.phpでアップロード処理が行なえません。

入力 → 確認 → アップロード

といった順で処理を行なう場合、どのような方法を採るのが良いでしょうか。
ヒントでもよいので教えて頂ければと思います。

A 回答 (3件)

b.phpでmove_uploaded_fileするという事は、そこからa.phpに戻った場合はファイルが残ってしまう事になります。

これ自体は仕方がない事ですね。

これが会員制のサイトであれば、move_uploaded_fileで移動する先のファイル名にユーザーIDなどを利用すれば、新たにファイルをアップロードした時に上書きされ、ゴミが残るのを避ける事ができます。しかしこうしたとしても、b.phpで中断したりした場合にどうしてもゴミが残るので、タイムスタンプを見て1日以上経過したものは削除、のようなスクリプトを組んでcrondで動かす必要はあります。

まあ、頻度やファイルの大きさによっては、時々見て手作業で削除でもいいですけどね。

これも嫌でしたら、ファイルのアップロード自体はb.phpから行うようにする以外はないと思いますよ。
    • good
    • 0

いくつか方法はありますが。



・セッションなどでファイル名を管理する。
セッションIDをファイル名にしてしまう。
b.php で拾ったファイル名は変数として受け渡して
c.phpでリネームする。

・単純にテンポラリフォルダを使用する。
b.phpのファイルを一旦、一時的に別のフォルダに保存しておく。
c.phpで指定のフォルダに移動すればよい。


どちらの場合もb.phpで処理を終了した場合はごみが残るので、これを削除するような作業が必要。
たとえば、a.phpを見たときに必ずテンポラリフォルダを見て、1時間以上前に作製されたものだったら削除する。
とか。
    • good
    • 0

うちで実践している方法です。


b.phpで、適当なユニークな名前を生成してmove_uploaded_fileします。このファイル名をc.phpに渡します。ファイルの内容チェックが必要でしたらb.phpで行うと良いと思います。

そしてc.phpでそのファイルを本来の場所に移動して終了です。

この回答への補足

wakame0729さん回答ありがとう御座います。

質問させて下さい。

>b.phpで、適当なユニークな名前を生成してmove_uploaded_fileします。
b.phpで、ユーザーが表示されているファイル名を確認し、間違えたファイルを
指定していたと気付いた場合、a.phpに戻って再び選択し直すと思いますが、
この場合は既に間違ったファイルが既にmove_uploaded_fileされている
ということでしょうか?
(ユーザーの確認前にとりあえずmove_uploaded_fileしているということでしょうか。)

補足日時:2005/06/18 02:35
    • good
    • 0

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