2011-10-28 4 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"; 
} 

일부는 다른 폴더, 임시 폴더처럼 제거 이 :

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

문제는입니다. 업로드 후 사용자가 등록하지 않으면 어떻게됩니까? 임시 폴더를 제거하는 방법? C:\Windows\Temp\pre569E.tmp

내 유일한 생각입니다 : 내가 .. 을 "자기를 제거합니다"하지만 Windows 서버에서 내가 예를 tempnam('/tmp/test', '');을 위해 생성 할 수있는 폴더를 만들 수 있습니다 tempnam 기능으로

, 불과 3 문자 접두어를 설정 임시 폴더의 데이터베이스 경로에 쓸 수 있습니다.

어떤 도움이 가장 환영받을 것입니다.

답변

2

사용자가 등록하지 않으면 수동으로 들어가서 해당 파일을 정리해야합니다. PHP는 원래의 임시 파일 만 남겨둔 경우 업로드를 자동 정리합니다. 명시 적으로 업로드 임시 디렉토리에서 이동 했으므로 정리하는 것은 전적으로 사용자의 책임입니다.

비어 있지 않은 디렉토리를 rmdir 할 수 없습니다. 해당 디렉토리의 모든 파일을 먼저 제거해야합니다. 가장 간단한 방법은해야 할 일

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

각 사용자마다 하위 디렉토리를 만들지 않는 것이 훨씬 쉽습니다. 업로드 임시 디렉토리에서 파일을 이동하십시오 (PHP는 자동 청소를하지 않으므로) session_id()를 파일 이름으로 사용하여 다른 중간 디렉토리에 저장하십시오. 이것은 등록되지 않은 각 사용자를 abbeyance에 보관 된 하나의 파일로 제한하지만 이는 아마도 좋은 일입니다. 모든 사용자의 파일은 혼합되지만 각 파일마다 고유 한 세션 기반 이름이 있으므로 충돌이 없습니다.

등록하지 않기로 결정한 사용자의 고아 파일을 정리해야하지만이 임시 파일 하나 하나에 일치하는 세션 파일이 있는지 확인하는 것은 간단합니다. 세션 파일이 없으면 사용자가 세션을 포기하고 PHP가 부실 세션 파일을 제거했습니다. 따라서 시간 초과 작업을 수행하여이 교차 점검을 수행하고 일치하는 세션이없는 파일을 제거 할 수 있습니다.

+0

설명해 주셔서 감사합니다. – enloz