1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
#!/usr/bin/php <? $host = "ftp.host.ru"; $dir = "backup/blabla"; $user = "ftp_user346"; $passwd = "p0sw0rd"; $interval = 3600*24*8; # 8 days $passive = true; # my FTP server only works in PASV mode $DEBUG = 1; // Парсим параметры вызова скрипта //var_dump($argv); $my_path = trim($argv[1]); $my_days = intval($argv[2]); $my_confirm = @$argv[3]; if(strlen($my_path)==0) die("[CLEANUP_BACKUP][ERROR] Path can not be empty!\n"); elseif(!$my_days) die("[CLEANUP_BACKUP][ERROR] Days count error\n"); $interval = $my_days * 3600 * 24; print "=========================================================\n"; print date("c")."\n"; print "Parsing parametres.......................................\n"; print "Host: {$host}\n"; print "Login: {$user}\n"; print "Path: {$my_path}\n"; print "Max days old: $my_days ($interval seconds)\n"; print "=========================================================\n"; $ftp = ftp_connect($host) or die("[CLEANUP_BACKUP][ERROR] Couldn't connect to $host"); if (@ftp_login($ftp, $user , $passwd)) { echo "Connected as $user\n"; } else { echo "[CLEANUP_BACKUP][ERROR] Couldn't connect as $user\n"; } ftp_pasv($ftp, $passive); echo ftp_pwd($ftp); // try to change the directory to somedir if (ftp_chdir($ftp, $my_path)) { echo "Current directory is now: " . ftp_pwd($ftp) . "\n"; } else { echo "[CLEANUP_BACKUP][ERROR] Couldn't change directory\n"; } // Парсим список файлов и ищем старые файлы $files = ftp_nlist($ftp, "."); var_dump($file); if(sizeof($files)==0)die("[CLEANUP_BACKUP][ERROR] Backup files list is empty!\n"); echo "[CLEANUP_BACKUP][INFO] Total files: ".sizeof($files)."\n"; $arDeleteFiles=array(); //Массив списка файлов на удаление foreach($files as $file){ $mdtm = ftp_mdtm($ftp, $file); if ($mdtm != -1) { //Проверяем, что время просрочилось $diff_time = time() - $mdtm; $percent = round($diff_time/$interval,5)*100; echo "[LOOP] $diff_time/$interval \t ({$percent}%) $file : "; if($diff_time > $interval){ echo "File is too old... delete plz...\n"; if($my_confirm){ //Добавляем файл в очередь на удаление $arDeleteFiles[]=$file; } }else{ echo "Good\n"; } } else { echo "[CLEANUP_BACKUP][ERROR] {$file} cant look up mod time\n"; } } //Удаляем файл и проверяем, что удаляется не более 30% файлов if(sizeof($arDeleteFiles)>0 ){ if((sizeof($arDeleteFiles)/sizeof($files)) > 0.3 )die("[CLEANUP_BACKUP][ERROR] attemp to delete more then 30% of files!"); foreach($arDeleteFiles as $DelFile){ if(ftp_delete($ftp, $file))echo "{$DelFile} - deleted\n"; else echo "{$DelFile} - error - can not delete file\n"; } } ftp_close($ftp); |