テンポラリファイルなど、何日か前のファイルを削除したい時があると思います。
例:my_folder 以下のファイル、ディレクトリ一覧を取得します。
$dir = dirname(__FILE__) . '/my_folder/';
$list = get_file_dir_list($dir);
// get_file_dir_list
function get_file_dir_list($dir=''){
if ( !$dir || !is_dir($dir) ){ die('dirを正しく設定してください。');}
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
$dir,
FilesystemIterator::SKIP_DOTS
|FilesystemIterator::KEY_AS_PATHNAME
|FilesystemIterator::CURRENT_AS_FILEINFO
), RecursiveIteratorIterator::CHILD_FIRST
);
$list = array();
foreach($iterator as $pathname => $info){
$list[] = $pathname;
}
return $list;
}
例:my_folder 以下のファイル、ディレクトリから1ヶ月以上前のものは削除します。
$list = get_file_dir_list($dir);
print_r($list);
del_file_dir($list, '-1 month');
// del_file_dir
function del_file_dir( $list=array(), $expire_date_str='-1 month' ){
//削除期限
date_default_timezone_set('Asia/Tokyo');
$expire_timestamp = 0;
if (($expire_timestamp = strtotime($expire_date_str)) === false) { die("The expire string : ({$expire_date_str}) is bogus"); }
foreach ($list as $file_path) {
if ( preg_match("/\.gitkeep/", $file_path) ){ continue; } // .gitkeep は削除しない
$mod = filemtime( $file_path );
if($mod < $expire_timestamp){
if (is_dir($file_path)){
echo 'ディレクトリ削除します : '. $file_path.date("Y-m-d H:i:s", $mod)."\n";
rmdir($file_path) or die("can not delete directory:({$file_path})");
}
if (is_file($file_path)){
echo 'ファイル削除します : '. $file_path.date("Y-m-d H:i:s", $mod)."\n";
unlink($file_path) or die("can not delete file:({$file_path})");
}
}
}
}