PHP 현재 시간을 체크하여 10분이전의 파일 및 디렉토리 삭제하기

#!/home1/ysoftman/local/php/bin/php -q
<?
// 현재 시간을 체크하여 파일 및 디렉토리 삭제
function DelDir($dir)
{
 /// 현재 시간 알기
 $CurTime = date("Y-m-d-H-i-s", time());
 // 년 월 일 시 분 초 추출
 $temp=explode("-", $CurTime);
 $year=$temp[0];
 $month=$temp[1];
 $day=$temp[2];
 $hour=$temp[3];
 $min=$temp[4];
 $sec=$temp[5];
 //printf("CurrentTime : %s-%s-%s-%s-%s-%s\n", $year, $month, $day, $hour, $min, $sec);
 if (substr($dir,-1) != "/")
 {
  // 현재 디렉토문자열 뒤에 / 붙이기
  $dir .= "/";
 }
 if (!is_dir($dir))
 {
  return false;
 }
 if (($dh = opendir($dir)) !== false)
 {
  while (($entry = readdir($dh)) !== false)
  {
   print("$dir$entry\n");
   if ($entry != "." && $entry != "..")
   {
    if (is_file($dir.$entry) || is_link($dir.$entry))
    {
     // 파일인경우 최근 수정 시간을 알아본다.
     $CurFileTime = date("Y-m-d-H-i-s", filemtime($dir.$entry));
     // 년 월 일 시 분 초 추출
     $temp=explode("-", $CurFileTime);
     $fyear=$temp[0];
     $fmonth=$temp[1];
     $fday=$temp[2];
     $fhour=$temp[3];
     $fmin=$temp[4];
     $fsec=$temp[5];
     printf("CurrentFileTime : %d-%d-%d-%d-%d-%d\n", $fyear, $fmonth, $fday, $fhour, $fmin, $fsec);
     // 10분 이전의 파일은 삭제한다
     printf("CurrentMin-FileMin = %d\n", abs($min-$fmin));
     if (abs($min-$fmin) >= 10)
     {
      print("$dir$entry --> unlink(delete)\n");
      unlink($dir.$entry);
     }
    }
    else if (is_dir($dir.$entry))
    {
     DelDir($dir.$entry);
    }
   }
  }
  closedir($dh);
  // 파일이 없는 빈 디렉토리일 경우만 삭제된다.
  rmdir($dir);
  return true;
 }
 return false;
}
// 디렉토리(폴더) 리스트 알아오기
function DirList($dirPath)
{
 if (!is_dir($dirPath))
 {
  print("$dirPath 없음");
  return false;
 }
 if ($handle = opendir($dirPath))
 {
  while (false !== ($file = readdir($handle)))
  {
   if ($file != "." && $file != "..")
   {
    if (is_dir($dirPath."/".$file))
    {
     $dirList[] = $file;
    }
   }
  }
  closedir($handle);
 }
 if (count($dirList)<0)
 {
  return false;
 }
 return $dirList;
}
// 날짜 디렉토리(폴더) 찾아서 삭제하기
function CheckTargetDir($BaseDir)
{
 /// 현재 시간 알기
 $CurTime = date("Y-m-d-H-i-s", time());
 // 년 월 일 시 분 초 추출
 $temp=explode("-", $CurTime);
 $year=$temp[0];
 $month=$temp[1];
 $day=$temp[2];
 $hour=$temp[3];
 $min=$temp[4];
 $sec=$temp[5];
 printf("CurrentTime : %s-%s-%s-%s-%s-%s\n", $year, $month, $day, $hour, $min, $sec);
 // 년 폴더 리스트 파악
 $YearDirArr = DirList($BaseDir);

 // 년 폴더 안에 달 폴더가 있으면
 if (count($YearDirArr) > 0)
 {
  foreach($YearDirArr as $YearDirName)
  {
   // 현재 년 이전의 폴더가 있다면
   if ($year >=  $YearDirName)
   {
    // 년 폴더 안으로 들어가기
    $TargetDir = $BaseDir."/".$YearDirName;
    printf("Current TargetDir : %s\n", $TargetDir);
    // 년 폴더 안의 달 폴더 리스트 파악
    $MonthDirArr = DirList($TargetDir);
    // 년 폴더 안에 달 폴더가 있으면
    if (count($MonthDirArr) > 0)
    {
     foreach($MonthDirArr as $MonthDirName)
     {
      // 현재 달 이전의 달 폴더가 있다면
      if ($month >=  $MonthDirName)
      {
       // 달 폴더 안으로 들어가기
       $TargetDir = $BaseDir."/".$YearDirName."/".$MonthDirName;
       printf("Current TargetDir : %s\n", $TargetDir);
       // 달 폴더의 안의 일 폴더 리스트 파악
       $DayDirArr = DirList($TargetDir);
       // 달 폴더 안에 일 폴더가 있으면
       if (count($DayDirArr) > 0)
       {
        foreach($DayDirArr as $DayDirName)
        {
         printf("Current TargetDir : %s\n", $TargetDir);

         // 현재 일보다 2 일전의 폴더가 있다면
         //if ($day-2 >= $DayDirName)
         {
          // 일 폴더를 지워야 할 폴더로 설정
          $TargetDir = $BaseDir."/".$YearDirName."/".$MonthDirName."/".$DayDirName;
          // 일폴더 지우기
          DelDir($TargetDir);
         }
        }
       }
       // 달 폴더 안에 일 폴더가 아무것도 없으면
       else
       {
        // 현재 달 폴더 지우기
        DelDir($TargetDir);
       }
      }
     }
    }
    // 년 폴더 안에 달 폴더가 아무것도 없으면
    else
    {
     // 현재 년 폴더 지우기
     DelDir($TargetDir);
    }
   }
  }
 }
}
$BaseDir = "/home/test";
CheckTargetDir($BaseDir);
?>

comments:

댓글 쓰기