jonatasfenske / uploader
Upload seguro de arquivos PHP 8.5 com validação MIME real via finfo_file, sanitização SVG, conversão WebP automática e suporte dual GD/Imagick
v1.0.0
2026-11-13 19:01 UTC
Requires
- php: >=8.5
- ext-exif: *
- ext-fileinfo: *
- ext-gd: *
- ext-mbstring: *
Requires (Dev)
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^12.0
Suggests
- ext-imagick: Para performance superior em processamento de imagens
Provides
None
Conflicts
None
Replaces
None
README
Upload seguro de arquivos PHP 8.5 com validação MIME real e conversão WebP
Instalação
composer require jonatasfenske/uploader
Recursos
- Validação MIME real via
finfo_file— bloqueia.exerenomeado como.jpg - Sanitização de SVG contra XSS, XXE, event handlers e PHP tags
- Validação de dimensões de imagens (min/max width e height)
- Conversão WebP automática no momento do upload
- Suporte dual GD/Imagick com detecção automática via
ImageEngineenum - MimeType enum para type-safety em tipos permitidos
- Upload múltiplo com normalização de array
$_FILES - Classes especializadas: Image, File, Media, Send
Uso Rápido
Upload de Imagem Seguro
use JonatasFenske\Uploader\Image; use JonatasFenske\Uploader\FileValidator; $image = new Image('storage/uploads', 'images'); $path = $image->upload( image: $_FILES['foto'], name: 'avatar', width: 1200, toWebP: true, validateMime: true, maxWidth: 4096, maxHeight: 4096, maxSizeBytes: FileValidator::parseSize('5MB'), );
Upload de Documentos
use JonatasFenske\Uploader\File; $file = new File('storage/uploads', 'documents'); $path = $file->upload($_FILES['pdf'], 'relatorio-anual');
Upload Múltiplo
$files = $image->multiple('fotos', $_FILES); foreach ($files as $file) { $path = $image->upload($file, 'galeria', width: 800); }
Validação Standalone
use JonatasFenske\Uploader\FileValidator; FileValidator::validateMime($_FILES['foto'], ['jpg', 'png', 'webp']); FileValidator::validateDimensions($_FILES['foto']['tmp_name'], maxWidth: 4096); FileValidator::validateSvg('storage/uploads/icon.svg'); FileValidator::validateSize($_FILES['video'], FileValidator::parseSize('50MB'));
Testes
composer test
Licença
MIT