Delete old files in Laravel apps
, (*1)
This package will delete old files from directories. You can use a configuration file to specify the maximum age of a file in a certain directory., (*2)
Support us
, (*3)
We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products., (*4)
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall., (*5)
Installation
You can install the package via composer:, (*6)
``` bash
composer require spatie/laravel-directory-cleanup, (*7)
In Laravel 5.5 the service provider will automatically get registered. In older versions of the framework just add the service provider in `config/app.php` file:
```php
'providers' => [
...
Spatie\DirectoryCleanup\DirectoryCleanupServiceProvider::class,
];
Next, you must publish the config file:, (*8)
php artisan vendor:publish --provider="Spatie\DirectoryCleanup\DirectoryCleanupServiceProvider"
This is the content of the published config file laravel-directory-cleanup
, (*9)
return [
'directories' => [
/*
* Here you can specify which directories need to be cleanup. All files older than
* the specified amount of minutes will be deleted.
*/
/*
'path/to/a/directory' => [
'deleteAllOlderThanMinutes' => 60 * 24,
],
*/
],
/*
* If a file is older than the amount of minutes specified, a cleanup policy will decide if that file
* should be deleted. By default every file that is older than the specified amount of minutes
* will be deleted.
*
* You can customize this behaviour by writing your own clean up policy. A valid policy
* is any class that implements `Spatie\DirectoryCleanup\Policies\CleanupPolicy`.
*/
'cleanup_policy' => \Spatie\DirectoryCleanup\Policies\DeleteEverything::class,
];
Usage
Specify the directories that need cleaning in the config file., (*10)
When running the console command clean:directories
all files in the specified directories older than deleteAllOlderThanMinutes
will be deleted. Empty subdirectories will also be deleted., (*11)
This command can be scheduled in Laravel's console kernel., (*12)
// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('clean:directories')->daily();
}
Writing a custom clean up policy
If you want to apply additional conditional logic before a file is deleted, you can replace the default cleanup_policy
with a custom one.
Create a class which implements Spatie\DirectoryCleanup\Policies\CleanupPolicy
and add your logic to the shouldDelete
method., (*13)
// app/CleanupPolicies/MyPolicy.php
namespace App\CleanupPolicies;
use Symfony\Component\Finder\SplFileInfo;
use Spatie\DirectoryCleanup\Policies\CleanupPolicy;
class MyPolicy implements CleanupPolicy
{
public function shouldDelete(SplFileInfo $file) : bool
{
$filesToKeep = ['robots.txt'];
return ! in_array($file->getFilename(), $filesToKeep);
}
}
Changelog
Please see CHANGELOG for more information on what has changed recently., (*14)
Testing
bash
$ composer test
, (*15)
Contributing
Please see CONTRIBUTING for details., (*16)
Security
If you've found a bug regarding security please mail security@spatie.be instead of using the issue tracker., (*17)
Credits
License
The MIT License (MIT). Please see License File for more information., (*18)