Installation:
composer require knplabs/gaufrette
.gitattributes to optimize Composer installs by reducing unnecessary file downloads (v0.11.1+).Basic Setup:
use Gaufrette\Filesystem;
use Gaufrette\Adapter\Local;
$adapter = new Local('/path/to/storage');
$filesystem = new Filesystem($adapter);
file_put_contents, unlink) with Gaufrette’s methods like:
$filesystem->write('file.txt', 'Hello, Gaufrette!');
$filesystem->delete('file.txt');
Adapter Abstraction:
Local, Flysystem, S3, Azure, etc.) or extend with custom ones.$adapter = new \Gaufrette\Adapter\Azure(
$connectionString,
$containerName,
$blobName
);
$filesystem = new Filesystem($adapter);
$filesystem->write('large-file.zip', fopen('php://input', 'r')); // Stream works reliably
Laravel Integration:
Storage facade:
use Illuminate\Support\Facades\Storage;
use Gaufrette\Filesystem;
Storage::extend('gaufrette', function ($app) {
$adapter = new \Gaufrette\Adapter\Local(storage_path('app'));
return new Filesystem($adapter);
});
Storage::disk('gaufrette')->put('file.txt', 'content');.Common Operations:
$filesystem->write('large-file.zip', fopen('php://input', 'r'));
getMetadata() and setMetadata() for custom file attributes.mkdir/rmdir with:
$filesystem->createDirectory('subfolder');
$filesystem->deleteDirectory('subfolder');
Event Listeners:
Filesystem::addListener():
$filesystem->addListener('update', function ($file, $event) {
logger()->info("File {$file->getKey()} was updated!");
});
Adapter-Specific Quirks:
realpath().config or environment variables). Monitor API call quotas.Memory Management:
read() or get(). Use streams (fopen) or chunked reads:
$filesystem->read('large-file.log', null, 0, 1024); // Read first 1KB
Race Conditions:
flock or Laravel’s Semaphore).Metadata Conflicts:
$adapter = new \Gaufrette\Adapter\Local(storage_path('app'));
$adapter = new \Gaufrette\Adapter\LoggingAdapter($adapter, new \Monolog\Logger('gaufrette'));
has() before operations to avoid Gaufrette\Exception\FileNotFound:
if (!$filesystem->has('file.txt')) {
throw new \RuntimeException('File missing!');
}
Azure adapter is initialized with a valid connection string.Custom Adapters:
Gaufrette\Adapter\BaseAdapter for new storage backends. Example:
class DatabaseAdapter extends BaseAdapter {
public function write($file, $content) {
// Save to DB...
}
// Implement other required methods (read, delete, etc.)
}
Middleware:
class CompressingFilesystem extends Filesystem {
public function write($file, $content) {
$compressed = gzcompress($content);
parent::write($file, $compressed);
}
}
Laravel Service Providers:
$this->app->bind('gaufrette', function ($app) {
return new Filesystem(new Local(storage_path('app')));
});
$this->app->bind('gaufrette-backups', function ($app) {
return new Filesystem(new Local(storage_path('backups')));
});
How can I help you explore Laravel packages today?