2010-05-25 3 views
5

Sto lavorando su uno script di caricamento PHP e durante il test dei miei errori, ho tentato di caricare un file TIFF da 17MB. Quando faccio questo l'array $ _FILES è vuoto. Lo script funziona bene per quello che ho bisogno di fare, che è quello di caricare file JPEG. La mia soluzione è di verificare se $ _FILES è vuoto o meno prima di continuare con lo script di caricamento.

Qualcuno può spiegare perché $ _FILES è vuoto quando si tenta di caricare un TIFF? La mia soluzione è controllare se $ _FILES è vuoto o no, ok?

Ha qualcosa a che fare con le impostazioni in php.ini?

Giusto per chiarire

stavo controllando che $_FILES era vuoto utilizzando il seguente:

if(empty($_FILES)) 
{ 
    die('$_FILES is empty.'); 
} 

risposta

7

Sì, upload_max_filesize controlla la dimensione massima di caricamento, che il file TIFF ha probabilmente superato. Il valore predefinito è 2M. È possibile verificare con:

echo ini_get("upload_max_filesize"); 

EDIT: In realtà, la causa esatta è più probabile post_max_size, che è sempre> = upload_max_filesize: "Se la dimensione dei dati post è maggiore di post_max_size, i $ _POST e $ _FILES superglobals sono vuoti. "

+0

Grazie! È stato sicuramente perché le dimensioni del file TIFF hanno superato sia 'upload_max_filesize' che' post_max_size'. –

1

Si dovrebbe controllare per vedere se è uguale a $_FILES['file']['error']0. Questo indica un "successo".

Se l'array di file è vuoto, potrebbe essere a causa di qualche altro problema, come non includere l'enctype.

prova a fare var_dump($_FILES) e la visualizzazione dei contenuti ...

EDIT: So che è possibile impostare la dimensione del file max nel file php.ini, ma non sono sicuro se questo vi darà una serie di file vuoto. Penso che avrai appena un errore.

+0

Buon consiglio. Per var_dump un array vuoto –

+1

@Col - Dal momento che suona come un principiante, è stato per aiutare a verificare che l'array sia effettivamente vuoto e che non stia visualizzando l'indice sbagliato. –

0

Come già pubblicato, è vuoto perché in caso di errore. Controllare anche per un elemento del modulo come questo:

<input type="hidden" name="MAX_FILE_SIZE" value="-maxsizegoeshereinbytes-" /> 

Per essere più sicuri (una volta che in realtà hanno una matrice - aggiungendo alla 'controllare la chiave di errore' posta, btw), è anche possibile controllare la dimensione

if($_FILES['file']['size'] > 0) { 

} 
+0

Non è vero. Solo PHP presta attenzione al campo MAX_FILE_SIZE. –

+0

Risposta aggiornata: grazie per questo dettaglio. Anche se ancora applicabile, come questo è php. –

+0

La tua risposta è ancora irrilevante –