- ベストアンサー
ファイルのアップロード
現在下記のような処理を行なおうとしております。 a.php > 入力ページ アップロードするファイルを選択します。 b.php > 確認ページ アップロードするファイルのファイル名を表示します。 c.php > アップロードページ a.phpで選択したファイルをアップロードします。 move_uploaded_fileで実現しようと思っているのですが、b.php → c.phpの タイミングでa.phpで選択したファイルがテンポラリディレクトリから 削除されてしまうため、c.phpでアップロード処理が行なえません。 入力 → 確認 → アップロード といった順で処理を行なう場合、どのような方法を採るのが良いでしょうか。 ヒントでもよいので教えて頂ければと思います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
b.phpでmove_uploaded_fileするという事は、そこからa.phpに戻った場合はファイルが残ってしまう事になります。これ自体は仕方がない事ですね。 これが会員制のサイトであれば、move_uploaded_fileで移動する先のファイル名にユーザーIDなどを利用すれば、新たにファイルをアップロードした時に上書きされ、ゴミが残るのを避ける事ができます。しかしこうしたとしても、b.phpで中断したりした場合にどうしてもゴミが残るので、タイムスタンプを見て1日以上経過したものは削除、のようなスクリプトを組んでcrondで動かす必要はあります。 まあ、頻度やファイルの大きさによっては、時々見て手作業で削除でもいいですけどね。 これも嫌でしたら、ファイルのアップロード自体はb.phpから行うようにする以外はないと思いますよ。
その他の回答 (2)
- moon_night
- ベストアンサー率32% (598/1831)
いくつか方法はありますが。 ・セッションなどでファイル名を管理する。 セッションIDをファイル名にしてしまう。 b.php で拾ったファイル名は変数として受け渡して c.phpでリネームする。 ・単純にテンポラリフォルダを使用する。 b.phpのファイルを一旦、一時的に別のフォルダに保存しておく。 c.phpで指定のフォルダに移動すればよい。 どちらの場合もb.phpで処理を終了した場合はごみが残るので、これを削除するような作業が必要。 たとえば、a.phpを見たときに必ずテンポラリフォルダを見て、1時間以上前に作製されたものだったら削除する。 とか。
- wakame0729
- ベストアンサー率32% (245/765)
うちで実践している方法です。 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しているということでしょうか。)