예제 #1
0
 protected function ciclar_archivos_logs($path, $archivo)
 {
     if (apex_log_archivo_backup_cant == 0) {
         //Si es un unico archivo hay que borrarlo
         unlink($path . "/" . $archivo);
         return;
     }
     //Encuentra los archivos
     $patron = "/{$archivo}\\.([0-9]+)/";
     $archivos = toba_manejador_archivos::get_archivos_directorio($path);
     sort($archivos);
     //¿Cual es el numero de cada uno?
     $ultimo = 0;
     $arch_ordenados = array();
     foreach ($archivos as $arch_actual) {
         $version = array();
         preg_match($patron, $arch_actual, $version);
         if (!empty($version) && count($version) > 1) {
             $pos = $version[1];
             $arch_ordenados[$pos] = $arch_actual;
             if ($pos > $ultimo) {
                 $ultimo = $pos;
             }
         }
     }
     //Se determina el siguiente numero
     $sig = $ultimo + 1;
     //¿Hay que purgar algunos?
     $puede_purgar = apex_log_archivo_backup_cant != -1;
     $debe_purgar = count($arch_ordenados) >= apex_log_archivo_backup_cant - 1;
     if ($puede_purgar && $debe_purgar) {
         ksort($arch_ordenados);
         reset($arch_ordenados);
         //Se dejan solo N-1 archivos
         $a_purgar = count($arch_ordenados) - (apex_log_archivo_backup_cant - 1);
         while ($a_purgar > 0) {
             unlink(current($arch_ordenados));
             $a_purgar--;
             next($arch_ordenados);
         }
     }
     //Se procede a mover el archivo actual
     $path_completo = $path . "/" . $archivo;
     if (apex_log_archivo_backup_compr) {
         //Se comprime
         $nuevo = $path_completo . ".{$sig}.gz";
         toba_manejador_archivos::comprimir_archivo($path_completo, 5, $nuevo);
         unlink($path_completo);
     } else {
         $nuevo = $path_completo . ".{$sig}";
         rename($path_completo, $nuevo);
     }
 }