mercoledì 18 dicembre 2024

PHP - Massima dimensione di POST e UPLOAD

Lo sviluppo per il web in PHP prevede l'invio ed il processo di informazioni tra client e server. In alcuni casi, è necessario inviare dei file al server (per il salvataggio, il processo, etc); il web server che utilizza PHP va quindi impostato per garantire che i file rispettino le dimensioni massime consentite.

La modifica va applicata su php.ini e riguarda i seguenti due elementi di configurazione:

  • post_max_size
  • upload_max_filesize

Il primo (post_max_size) definisce il peso massimo della chiamata POST, comprensiva del contenuto della form, degli header inviati e di tutti i file caricati.

Il secondo elemento (upload_max_filesize) definisce il peso massimo dei singoli file caricati.

In PHP è possibile controllare quanto vale ogni singolo elemento di configurazione; per farlo, bisogna inserire il seguente comando nello scritpt:

ini_get('post_max_size')

e:

ini_get('upload_max_filesize')

Questo produrrà una stringa con la dimensione massima "con unità", ad esempio "5M".

Per gestire eventuali errori, è possibile utilizzare una funzione che converta il valore di "post_max_size" e di "upload_max_filesize" in bytes e poi confrontare il dato con il peso del POST in arrivo.

In pratica:

function convertToBytes($from)
{
    $units = ['B', 'K', 'M', 'G', 'T', 'P'];
    $number = substr($from, 0, -1);
    $suffix = strtoupper(substr($from,-1));

    // B or no suffix
    if(is_numeric(substr($suffix, 0, 1)))
    {
        return preg_replace('/[^\d]/', '', $from);
    }

    $exponent = array_flip($units)[$suffix] != null ? array_flip($units)[$suffix] : null;

    if ($exponent === null)
    {
        return null;
    }

    return $number * (1024 ** $exponent);
} // convert_to_bytes

if (isset($_SERVER['CONTENT_LENGTH']) && (int) $_SERVER['CONTENT_LENGTH'] > convertToBytes(ini_get('post_max_size')))
{
    echo "errore!";
}

Nessun commento:

Posta un commento