/** * Execute log rotation * * @param string $fileName * @return void */ private static function _rotate($fileName) { $dirPath = PathManager::getLogDirectory(); // get file list in log directory $dir = dir($dirPath); $generations = array(); while ($content = $dir->read()) { $path = sprintf("%s/%s", $dirPath, $content); if (!is_file($path)) { // ignore directory continue; } $info = pathinfo($path); $name = $info['basename']; if (!preg_match(sprintf('|^%s(\\.[0-9]+)?$|', $fileName), $name)) { // ignore not match log name continue; } $generation = trim(str_replace($fileName, '', $name), '.'); if ($generation == '') { $generation = 0; } if ($generation >= self::$_generation - 1) { // delete if rotate num is over generation setting @unlink($path); } else { $generations[] = $generation; } } // increment log extension as rotate num rsort($generations); foreach ($generations as $gene) { $oldName = sprintf('%s/%s.%s', $dirPath, $fileName, $gene); $newName = sprintf('%s/%s.%s', $dirPath, $fileName, $gene + 1); @rename($oldName, $newName); } $filePath = sprintf("%s/%s", $dirPath, $fileName); @rename($filePath, $filePath . '.1'); $dir->close(); }