PHP: validare l'upload di immagini multiple

Short link

In PHP è semplice validare l'upload di immagini multiple.

Vogliamo accettare solo immagini JPEG, con una dimensione massima di 500 Kb e una larghezza non inferiore ai 1920 pixel. In altre parole, accettiamo solo immagini già ottimizzate per il web.

Possiamo definire la seguente soluzione.


define( 'MAX_IMAGE_SIZE', 500000 );
define( 'MIN_IMAGE_WIDTH', 1920 );

function validate_multiple_images_upload( $filename = 'images' ) {
     $valid = true;
     $countfiles = count( $_FILES[$filename]['name'] );
     if( $countfiles === 0 ) {
          return false;
     }
     for( $index = 0; $index < $countfiles; $index++ ) {
          switch ( $_FILES[$filename]['error'][$index] ) {
               case UPLOAD_ERR_OK:
                    break;
               case UPLOAD_ERR_NO_FILE:
                    $valid = false;
                    break;
               case UPLOAD_ERR_INI_SIZE:
               case UPLOAD_ERR_FORM_SIZE:
                    $valid = false;
                    break;
               default:
                    $valid = false;
                    break;
          }
          if ( $_FILES[$filename]['size'][$index] > MAX_IMAGE_SIZE ) {
               $valid = false;
               break;
          }

          $finfo = new finfo(FILEINFO_MIME_TYPE);
          if (false === $ext = array_search(
                    $finfo->file( $_FILES[$filename]['tmp_name'][$index] ),
                    array(
                         'jpg' => 'image/jpeg'
                    ),
                    true
               )) {
               $valid = false;
               break;
          }

          list( $width ) = getimagesize( $_FILES[$filename]['tmp_name'][$index] );

          if( intval( $width ) < MIN_IMAGE_WIDTH ) {
               $valid = false;
               break;
          }
     }

     return $valid;
}

In pratica la nostra funzione di validazione va invocata prima della funzione move_uploaded_file(). Quest'ultima funzione deve essere invocata solo se la validazione viene superata.

L'autore

Gabriele Romanato, sviluppatore web full stack specializzato in siti, applicativi web ed e-commerce con Node.js e PHP.