プロが教える店舗&オフィスのセキュリティ対策術

宜しくお願いします。

PHP4+MySQLで簡単なWebシステムを構築しています。
1つのフォームから、数点の画像をアップロードして登録したいと思っています。
「登録内容はこちらでよろしいですか?」というような確認画面で、いったん確認画面に画像を表示させます。
ここでOKなら登録、というオペレーションです。

一見簡単なのかと思いきや、どうしても実現させる方法がわからずに困っています。

当初は、確認画面に移る段階で、PHPのテンポラリーファイルを、別の一時ディレクトリへ格納しようとしました。
ところが技が足りないのか、セッションが切れた場合などに、サーバーにファイルが残るようなコードになっちゃいます。

悩んだ末、サーバーに対して「フォルダに2時間以上あるファイルは自動で削除する」ような設定を施すしかないと思ったのですが、ライアントの都合上、できればサーバー設定をいじってほしくないと言われまして。。。

もしかしたら、すごく簡単なのかもしれないのですが、完全にハマってしまっています。
なにか方法がありましたら是非ご教示ください。

登録者は特定の人たちなので、OSやブラウザなどの使用環境は、あるていど統一できます。
ですからPHPだけでなくJavaScriptを絡めてでも、実現できたらと思っています。

どうか宜しくお願いいたします。

A 回答 (2件)

基本的に、Webサーバ側ではテンポラリファイルを簡単には消すことができないと思っています。



JavaScriptのonUnloadイベントなどを使って、PHPのテンポラリファイル削除スクリプトなどを呼ぶことができれば、ユーザがブラウザを閉じたりしたときに消すことができると思いますが、完了画面に行く際などはその処理をさけなければなりません(JavaScriptはブラウザを閉じるのか、ページが切り替わるのかなんて気にしないはずだし・・・)し、面倒な処理が必要になってくるかと思います。

cronなどで数時間そのままのファイルを削除するスクリプトを呼ぶ設定した方が明らかに早い気がしますが、絶対にできないことなのでしょうか?きちんとお客様に説明できれば納得されると思いますよ。

・ブラウザを閉じる際にはサーバに要求がこないので、テンポラリファイルが削除できない
・セッションが切れたりした場合は、誰だかわからなくなるので、どのファイルを削除すべきか判断しにくい
など、いろいろお客様を納得させられる話し方はあるのではないでしょうか?

それから・・・
the845tさまの書かれた方法では、他の人が同時にファイルをアップロードしようとしたときに問題が出てくるため、それを解決しなければならなくなるかと思いますが・・・
#サーバにすでにあるファイル名をさけてファイルを
#開いて、という方法も同時に見に行った場合、
#検出は困難だと思います。

間違いがありましたらご指摘ください。
ではでは☆
    • good
    • 0
この回答へのお礼

私もKanataさんの結論と同じところに達していたのですが、もしかして何か良い方法があるのでは!?と思い質問させて頂きました。
おかげさまで自信を持ってお客様に主張できました!
(お客様の結論は、1週間に1回くらいFTPを使って、手動で消すとのことでした)
どうもありがとうございました。

お礼日時:2003/08/05 09:20

投稿の際は、tmp1、tmp2、tmp3などの名前にしておき、


実際に投稿する際に適当な名前を付けて保存。
その後tmp1~3を削除。

こうしておけば、セッションが切れても
次の投稿で同じ名前で保存されるから消えるのでは?
(あんまり言い方法じゃないと思いますが。)
    • good
    • 0
この回答へのお礼

認証があればこの方法も使えそうですね。
今回はちょっと採用できませんが、またの参考にさせて頂きます。
どうもありがとうございました。

お礼日時:2003/08/05 09:27

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