PHP: creare una classe per validare l'upload dei file

PHP: creare una classe per validare l'upload dei file

La validazione dell'upload di file è un'operazione comune quando si lavora con applicazioni web, poiché i file caricati possono contenere dati sensibili e non validi. In PHP, la creazione di una classe per validare l'upload di file può semplificare notevolmente il processo di validazione e garantire una maggiore sicurezza.

Per creare una classe PHP per validare l'upload di file, è necessario definire alcune regole di base che verranno utilizzate per verificare se il file caricato soddisfa i criteri desiderati. In primo luogo, la classe dovrebbe controllare che il file sia stato caricato correttamente e che non ci siano stati errori nel processo di caricamento.

Una volta verificato che il file sia stato caricato correttamente, la classe dovrebbe controllare che il file rispetti i formati e le dimensioni consentite. Questo può essere fatto utilizzando funzioni come mime_content_type per verificare il tipo di file e filesize per controllare la dimensione del file.

Inoltre, la classe dovrebbe anche controllare che il file abbia un nome univoco, per evitare che un file sovrascriva un altro file esistente con lo stesso nome. Questo può essere fatto utilizzando metodi come uniqid per generare un nome univoco per il file.

Infine, la classe dovrebbe controllare anche che il file sia stato caricato nella cartella di destinazione corretta e che sia stata impostata la corretta autorizzazione di accesso alla cartella per garantire che il file possa essere letto e scritto.

In sintesi, una classe PHP per validare l'upload di file dovrebbe includere i seguenti metodi:

  • Un metodo per verificare che il file sia stato caricato correttamente e senza errori;
  • Un metodo per controllare il tipo e la dimensione del file;
  • Un metodo per generare un nome univoco per il file;
  • Un metodo per controllare che il file sia stato caricato nella cartella di destinazione corretta e con la corretta autorizzazione di accesso.

Ecco un esempio di classe PHP per validare l'upload di file:


class FileUploader {

    public function __construct(
        private array $allowedTypes,
        private int $maxSize,
        private string $targetDir,
        private $file
    ) {
        
    }

    public function uploadFile() : boolean {
        if($this->isUploadError()) {
            return false;
        }
        if(!$this->isValidMime()) {
            return false;
        }
        if(!$this->isValidSize()) {
            return false;
        }
        $filename = uniqid() . '-' . $this->file['name'];
        $targetPath = $this->targetDir . $filename;

        if (!move_uploaded_file($this->file['tmp_name'], $targetPath)) {
            return false;    
        }    
        return true;
    }

    private function isUploadError() : boolean {
        return ($this->file['error'] !== UPLOAD_ERR_OK);
    }

    private function isValidMime() : boolean {
        $type = mime_content_type($this->file['tmp_name']);
        return (in_array($type, $this->allowedTypes)
    }
    private function isValidSize() : boolean {
        $size = filesize($this->file['tmp_name']);
        return ($size <= $this->maxSize);
    }
}

Esempio d'uso:


$uploader = new FileUploader(
    allowedTypes: ['image/jpeg', 'image/png'],
    maxSize: 10485760; // 10MB,
    targetDir: $_SERVER['DOCUMENT_ROOT'] . '/upload/images/',
    file: $_FILES['image']
);

if($uploader->uploadFile()) {
    //...
}

Torna su