2010-05-21 2 views
7

Sto riscontrando problemi con un'utilità di caricamento file nella mia applicazione PHP. Quando si inviano file di grandi dimensioni (9 MB +) sul modulo, ho un comportamento molto strano: i dati POST che ho incluso nel modulo spariscono, comprese le informazioni sul file.POST di dati che scompaiono nel caricamento di file di grandi dimensioni

Ho già aumentato tutti i limiti PHP che potevo (limite di tempo, tempo massimo di inserimento, dimensione massima del messaggio, limite di memoria e dimensione massima del file caricato) e non riesco ancora a ottenere il comportamento corretto. Ho provato a sostituire i normali moduli HTTP con una soluzione basata su Flash (SWFUpload, www.swfupload.org), mantenendo lo stesso comportamento.

Ho provato più file di dimensioni simili e non è sicuramente un problema di file particolare. Ho eseguito il debug delle VAR POST inviate usando Firebug e le variabili corrette sono ancora presenti nell'intestazione, insieme al file.

Cosa potrebbe succedere qui?

+1

Che ne dite di guardare nei log dei server. Cerca di individuare eventuali errori/avvertenze. – nc3b

+0

L'ho fatto, non dice nulla. – DfKimera

+0

Sto riscontrando lo stesso problema. Hai risolto il tuo problema? I registri del server –

risposta

2

I server Web possono anche essere configurati per limitare le dimensioni delle richieste. Se utilizzi Apache, consulta la direttiva LimitRequestBody.

+0

Ho dato un'occhiata alla configurazione di Apache, la direttiva LimitRequestBody non è presente, quindi presumo che sia sul valore predefinito (0 o nessun limite) – DfKimera

+0

Si è rivelato che questo era il problema. Tranne l'impostazione WHM/cPanel che avevo in quel momento ho reso davvero difficile cambiare veramente la direttiva LimitRequestBody. Aumentare questo + post_max_size, caricare la dimensione massima e il limite di memoria dovrebbe risolvere il problema. – DfKimera

+0

Ho provato a cambiare post_max_size, upload_max_size e limite di memoria, ma sto ancora affrontando lo stesso problema. –

1

provare a caricare file piccoli di 1 - 2 MB. Se non si è ancora in grado di inviare il codice.

spero che tu abbia aggiunto enctype = '/ multipart/form-data' nella definizione del modulo.

+0

Ho fatto e piccoli file funzionano. Il problema si presenta con 8 MB + file. Enctype è lì. – DfKimera

0

In quale server è in esecuzione? Penso che alcuni sistemi operativi per server abbiano un limite per quanto riguarda i file di grandi dimensioni che consentono. Questo valore può essere modificato.

1

Ok, penso di avere la soluzione. È necessario verificare la direttiva post_max_size e $_SERVER['CONTENT_LENGTH'], quindi se $ _SERVER ['CONTENT_LENGTH'] supera post_max_size significa che stanno tentando di caricare troppi dati.

$POST_MAX_SIZE = ini_get('post_max_size'); 
$mul = substr($POST_MAX_SIZE, -1); 
$mul = ($mul == 'M' ? 1048576 : ($mul == 'K' ? 1024 : ($mul == 'G' ? 1073741824 : 1))); 
if($_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) 
{ 
    $error = true; 
} 

soluzione prelevata da qui: http://www.php.net/manual/en/features.file-upload.php#73762