back to top

The uploaded file exceeds the upload_max_filesize directive in php.ini: Come risolvere l’errore su PHP

Gestendo gli upload con PHP è facile imbattersi nell’errore “Il file caricato eccede la direttiva upload_max_filesize in php.ini” (o, in inglese, “The uploaded file exceeds the upload_max_filesize directive in php.ini“).

Questo errore si verifica comunemente quando si cerca di caricare un file di dimensioni superiori a quelle consentite dalle impostazioni del server.

In questo articolo vedremo, nel dettaglio, cosa significa questo errore e diverse strade per cercare di risolverlo.

Cos’è l’errore “Il file caricato eccede la direttiva upload_max_filesize”?

Questo errore si verifica quando si effettua l’upload di un file che supera la dimensione massima impostata nel file di configurazione di PHP (php.ini). All’interno di questo file ci sono diverse direttive che determinano il comportamento del server e tra queste upload_max_filesize, come il nome lascia intuire, è utilizzata per impostare la dimensione massima consentita per l’upload di file.

Se si cerca di caricare un file di dimensioni maggiori il server restituirà errore indicando, appunto, che è stata superata la soglia massima consentita.

Cos’è il file php.ini?

Il file php.ini è un file di configurazione utilizzato da PHP per definire le impostazioni del server. Contiene diverse opzioni che possono essere modificate per personalizzare il comportamento di PHP sul server, come il limite di memoria massimo, la massima dimensione dei file che possono essere caricati e altro ancora.

Il file php.ini viene letto dal server web al momento dell’avvio di PHP e le impostazioni al suo interno verranno applicate dal server a tutti gli script PHP in esecuzione.

Se il tuo sito web è installato su uno spazio condiviso, di solito, queste direttive non possono essere modificate, tranne eventualmente in modo limitato poiché la gestione del file php.ini è ad appannaggio dell’amministratore di sistema (eccezioni possono esserci, ma dipende dalle caratteristiche dell’hosting che hai acquistato).

Importanza di una corretta gestione dei limiti in fase di upload

Qualcuno potrebbe pensare che per risolvere facilmente questo errore basterebbe aumentare notevolmente questo limite consentendo, di fatto, upload di file di ogni dimensione. In realtà un simile approccio sarebbe sbagliato.

Definire correttamente un limite per l’upload di file da parte degli utenti di un sito web o di una web-application è cruciale per almeno due motivi:

  • Impostare correttamente i limiti per i file caricati tramite applicativi PHP può prevenire errori e migliorare l’esperienza utente: l’upload di file molto grandi può essere causa di errori di caricamento e ciò può comportare frustarazione per gli utenti del sito con conseguente rischio di abbandono.
  • Impostare dei limiti adeguati per le dimensioni dei file aiuta anche a preservare le risorse del server, evitando che file troppo grandi sovraccarichino lo spazio disponibile o consumino eccessivamente la banda a disposizione.

Come modificare upload_max_filesize in PHP

Fermo restando quanto detto sopra, se l’impostazione attuale risulta “troppo stringente” è possibile intervenire sul file di configurazione di PHP. Vediamo come procedere.

Verifica dell’attuale impostazione

Prima di procedere, è necessario controllare la dimensione massima attualmente impostata per il caricamento dei file. Puoi farlo creando un file PHP con il seguente codice:

<?php phpinfo(); ?>

Carica questo file sul tuo server, ad esempio creando il file “phpinfo.php” e accedilo tramite il browser. Fai una ricerca in pagina per la voce upload_max_filesize e post_max_size per verificarne i valori attuali.

In alternativa al metodo appena proposto, per verificare il valore attuale di upload_max_filesize e post_max_size, è possibile utilizzare il seguente codice PHP:

echo 'Valore di upload_max_filesize: ' . ini_get('upload_max_filesize') . '<br>';
echo 'Valore di post_max_size: ' . ini_get('post_max_size');

Questo codice stampa i valori correnti in byte. Per convertire l’output in un formato più leggibile, ad esempio megabyte, è possibile utilizzare una funzione come questa:

function converti_in_mb($bytes) {
  return $bytes / 1048576;
}
echo 'Valore di upload_max_filesize: ' . converti_in_mb(ini_get('upload_max_filesize')) . ' MB';
echo 'Valore di post_max_size: ' . converti_in_mb(ini_get('post_max_size')) . ' MB<br>';

Questo codice converte il valore corrente di post_max_size e upload_max_filesize in megabyte e lo stampa a schermo.

Soluzione n.1 – Modifica del file php.ini

Una volta verificato il valore attuale, puoi modificarlo. Attenzione però: la modifica del file php.ini non è per tutti.

Se il tuo sito è ospitato in uno spazio web condiviso (un classico shared hosting per capirci) allora la modifica del file php.ini potrebbe non essere possibile (alcuni hosting provider la consentono attraverso cPanel, ad esempio, ma è una opzione da verificare caso per caso).

Se hai un server dedicato o una VM, invece, non ci sono problemi: trova e modifica il file php.ini, che si trova generalmente nella directory di configurazione del server (ad esempio /etc/php/7.4/apache2/php.ini su Linux).

Cerca la direttiva upload_max_filesize nel file e modificala con il nuovo valore, ad esempio:

upload_max_filesize = 10M

Per garantire che il caricamento dei file funzioni correttamente, è importante aggiornare anche altre direttive del file php.ini:

  • post_max_size: deve essere più grande o uguale a upload_max_filesize.
  • max_execution_time: potrebbe essere necessario aumentare questo valore se i caricamenti richiedono più tempo.
post_max_size = 12M
max_execution_time = 300

Dopo aver modificato il file php.ini, è necessario riavviare il server web per applicare le modifiche. Ad esempio, su server Apache:

sudo service apache2 restart

N.B. Anche il parametro memory_limit presente nel file php.ini può influire sul caricamento dei file in quanto definisce la quantità massima di memoria che uno script PHP può utilizzare. Se questo valore è impostato troppo basso, potrebbe non essere possibile caricare file di grandi dimensioni a causa della mancanza di memoria disponibile per elaborare la richiesta di caricamento. In questo caso, però, l’errore visualizzato sarebbe diverso da quello causato dalla direttiva upload_max_filesize.

Soluzione n.2 – Modifica tramite file .htaccess

Se non hai accesso diretto al file php.ini, puoi provare a modificare i limiti di caricamento tramite il file .htaccess. Per farlo aggiungi le seguenti righe:

php_value upload_max_filesize 10M
php_value post_max_size 12M
php_value max_execution_time 300

Attenzione però: certi hosting provider potrebbero proibire l’utilizzo di php_value all’interno di .htaccess e, di conseguenza, il codice inserito potrebbe produrre un errore 500. Se così fosse rimuovi il codice e ripristina il contenuto di .htaccess allo stato precedente.

Soluzione n.3 – Modifica tramite codice PHP

In alcuni casi, è possibile modificare queste impostazioni direttamente nel codice PHP. Questo approccio potrebbe essere tentato se non puoi accedere a php.ini o se la modifica ad .htaccess produce errore 500.

Per modificare i valori di configurazione di PHP aggiungi queste righe di codice all’inizio del tuo script:

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '12M');
ini_set('max_execution_time', '300');

Anche in questo caso non è garantito che ini_set() produca l’effetto voluto perché alcuni hosting provider potrebbero averle inibite per ragioni di sicurezza e di stabilità della propria infrastruttura.

Soluzione n.4 – Contatta il tuo fornitore di hosting

Se nessuna delle soluzioni proposte è percorribile, non resta che contattare il tuo fornitore di hosting. Indica chiaramente le tue esigenze e richiedi una modifica alla configurazione del tuo spazio web.

Non tutti gli hosting provider rispondo positivamente a simili richieste, tuttavia provare non cosa nulla.

Errori comuni e soluzioni

Cambiamenti non applicati

Se dopo aver modificato php.ini l’errore persiste, assicurati di aver modificato il file corretto. In ambienti configurati per ospitare più siti web potresti dover modificare il file php.ini specifico della directory del sito in uso. Dopo aver fatto la modifica ricordati di riavviare il web server per renderla effettiva.

Dimensioni dei file ancora insufficienti

Assicurati che il valore di post_max_size sia maggiore o uguale a upload_max_filesize. Inoltre, verifica di non superare eventuali i limiti imposti dall’hosting, che potrebbero essere più restrittivi.

Limite di tempo di esecuzione

Se il caricamento di file molto grandi impiega troppo tempo, potresti vedere l’errore “Maximum execution time exceeded”. Aumenta max_execution_time e max_input_time per evitare questi problemi.

Domande Frequenti

Qual è il limite di upload di file predefinito in PHP?

Il limite di upload predefinito varia in base alla versione di PHP, ma solitamente è impostato su 2 MB. Questo può essere modificato nel file php.ini.

Come posso vedere qual è il limite di upload impostato nel mio spazio web?

Puoi creare un file PHP con all’interno il comando phpinfo() che mostra tutte le configurazioni del server, inclusi upload_max_filesize e altre direttive utili.

È possibile cambiare upload_max_filesize tramite cPanel o Plesk?

Sì, su molti hosting condivisi che utilizzano cPanel o Plesk è possibile modificare le direttive di PHP, come upload_max_filesize, direttamente tramite il pannello di controllo dell’hosting. Questa possibilità non è sempre attiva, essendo facoltà del fornitore di servizi abilitare o meno la possibilità di modificare le impostazioni di PHP.

Cosa succede se provo a caricare un file più grande del limite impostato?

PHP restituirà un errore e il caricamento non avverrà. Non vi sarà alcun impatto negativo sul server, ma l’utente vedrà un messaggio di errore.

Come posso prevenire l’upload di file troppo grandi senza mostrare errori PHP?

Certo! Puoi aggiungere controlli di convalida all’interno del tuo codice PHP per verificare la dimensione del file prima di procedere con il caricamento, fornendo così un feedback immediato all’utente senza che arrivi all’errore.

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Cannot modify header information – headers already sent: come risolvere l’errore PHP

L'errore di PHP cannot modify header information - headers...

Ricavare l’estensione di un file con PHP

Quando si lavora con i file in un'applicazione web,...

GD Library: creazione, manipolazione e ridimensionamento immagini con PHP

Le librerie GD (o GD Library), sono componenti fondamentali...

PHP: impostare il fuso orario italiano

Le tue pagine PHP non mostrano l’orario corretto? Probabilmente...

5 script PHP per gestire BBCode

A volte può aversi l'esigenza di dover offrire agli...

Estrarre hostname e dominio da una URL con PHP

Grazie alla funzione parse_url() di PHP è possibile analizzare...
Pubblicità