PHP: gestire le dimensioni dei file per l'upload

In PHP esiste una procedura specifica per gestire le dimensioni dei file per l'upload.

Partiamo dall'esempio canonico della documentazione:


<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

Il controllo avviene confrontando il valore di $_FILES['userfile']['error']: se è UPLOAD_ERR_FORM_SIZE ossia 2, il file che si sta cercando di uploadare supera in byte la dimensione specificata nel campo del form MAX_FILE_SIZE.

Tuttavia fare affidamento solo su questo campo non impedisce l'invio remoto del form con un valore molto più grande per MAX_FILE_SIZE. Per prevenire questo tipo di exploit occorre utilizzare anche (e soprattutto) una validazione su $_FILES['userfile']['size'] verificando che non superi il valore massimo consentito o che generi gli errori UPLOAD_ERR_INI_SIZE o UPLOAD_ERR_NO_FILE.