12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
- namespace Gregwar\Image;
- /**
- * 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.
- */
- public static function drop($file, $verbose = false)
- {
- if (is_dir($file)) {
- @rmdir($file);
- } else {
- @unlink($file);
- }
- if ($verbose) {
- echo "> Dropping $file...\n";
- }
- }
- }
|