2011-10-28 9 views
2

アイデアはこれです:PHP - セッションの一時フォルダ

  1. ユーザーは、現在のセッションのためにだけ存在するいくつかの「一時」フォルダ内のファイルをアップロードします。
  2. ユーザーレジスタ
  3. "temp"フォルダのファイル形式は、別名永久保存フォルダに移動さ​​れます。

私はこのような何かを行うことができます。

mkdir('tempfiles/'.session_id(), 777) 

を、アップロードファイルは:

ユーザーレジスタは、ファイルが に移動され
if (move_uploaded_file($_FILES['my_files']['tmp_name'], 'tempfiles/'.session_id().'/')) { 
    // echo "success"; 
} 

一部は他のフォルダ、Tempフォルダが同様に削除されますこれは:

/* some function to empty dir */ 
rmdir('tempfiles/'.session_id()) 

問題がの場合 アップロード後のユーザーが登録しないとどうなりますか? tempフォルダを削除するには? C:\Windows\Temp\pre569E.tmp

私の唯一のアイデアがされています。私は... を「自己それを削除します」が、Windowsサーバでは、私は例tempnam('/tmp/test', '');のために作成することができないというフォルダを作成することができますtempnam機能で

、わずか3文字の接頭辞を設定します一時フォルダのデータベースパスに書き込みます。

どのようなヘルプも大歓迎です。

答えて

2

ユーザーが登録していない場合は、手動で入力してそれらのファイルをクリーンアップする必要があります。オリジナルの一時ファイルだけを残しておけば、PHPはアップロードを自動的にクリーンアップします。あなたが明示的にupload tempディレクトリからそれを移動したので、それはあなたが完全にあなたのためにクリーンアップすることを意味します。

空でないディレクトリをrmdirすることはできません。最初にそのディレクトリ内のすべてのファイルを削除する必要があります。最も簡単な方法を実行する

$files = glob('tempfiles/' . session_id()); 
foreach($files as $file) { 
    unlink($file); 
} 

さらに簡単に各ユーザーのサブディレクトリを作成しないでください。アップロードの一時ディレクトリからファイルを移動します(PHPは自動的にクリーンアップしません)。ファイル名としてsession_id()を持つ別の中間ディレクトリに保存します。これにより、登録されていない各ユーザーがabbeyanceで保持されている1つのファイルに制限されますが、それはおそらく良いことです。すべてのユーザーのファイルは混在しますが、それぞれに固有のセッションベースの名前があるため、競合はありません。

登録しないことを選択したユーザーからの孤児ファイルをクリーンアップする必要がありますが、これらの一時ファイルごとに一致するセッションファイルがないかどうかを確認するのは簡単ですセッションファイルがない場合、ユーザはセッションを中止し、PHPは古いセッションファイルを削除しました。したがって、このクロスチェックを実行し、一致するセッションのないファイルを削除することができます。

+0

ありがとうございます。 – enloz

関連する問題