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!";
}