1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <?php
- namespace Gregwar\Cache;
- /**
- * Garbage collect a directory, this will crawl a directory, lookng
- * for files older than X days and destroy them
- *
- * @author Gregwar <g.passault@gmail.com>
- */
- class GarbageCollect
- {
- /**
- * Drops old files of a directory
- *
- * @param string $directory the name of the target directory
- * @param int $days the number of days to consider a file old
- * @param bool $verbose enable verbose output
- *
- * @return true if all the files/directories of a directory was wiped
- */
- public static function dropOldFiles($directory, $days = 30, $verbose = false)
- {
- $allDropped = true;
- $now = time();
- $dir = opendir($directory);
- if (!$dir) {
- if ($verbose) {
- echo "! Unable to open $directory\n";
- }
- return false;
- }
- while ($file = readdir($dir)) {
- if ($file == '.' || $file == '..') {
- continue;
- }
- $fullName = $directory.'/'.$file;
- $old = $now-filemtime($fullName);
- if (is_dir($fullName)) {
- // Directories are recursively crawled
- if (static::dropOldFiles($fullName, $days, $verbose)) {
- self::drop($fullName, $verbose);
- } else {
- $allDropped = false;
- }
- } else {
- if ($old > (24*60*60*$days)) {
- self::drop($fullName, $verbose);
- } else {
- $allDropped = false;
- }
- }
- }
- closedir($dir);
- return $allDropped;
- }
- /**
- * Drops a file or an empty directory
- *
- * @param $file the file to be removed
- * @param $verbose the verbosity
- */
- public static function drop($file, $verbose = false)
- {
- if (is_dir($file)) {
- @rmdir($file);
- } else {
- @unlink($file);
- }
- if ($verbose) {
- echo "> Dropping $file...\n";
- }
- }
- }
|