2010-05-21 8 views
7

Tengo problemas con una utilidad de carga de archivos en mi aplicación PHP. Cuando envío archivos grandes (9MB +) sobre el formulario, obtengo un comportamiento muy extraño: los datos POST que he incluido en el formulario desaparecen, incluida la información del archivo.Desactivación de los datos POST en la carga de archivos grandes

Ya he aumentado todos los límites de PHP que pude (límite de tiempo, tiempo de entrada máximo, tamaño máximo de publicación, límite de memoria y tamaño de archivo máximo de carga) y todavía no puedo obtener el comportamiento correcto. He intentado reemplazar los formularios HTTP habituales con una solución basada en Flash (SWFUpload, www.swfupload.org), sigue teniendo el mismo comportamiento.

He intentado varios archivos de tamaños similares y definitivamente no es un problema de archivo en particular. He depurado los valores de POST enviados con Firebug, y las variables correctas siguen ahí en el encabezado, junto con el archivo.

¿Qué podría estar pasando aquí?

+1

¿Qué hay de buscar en los registros del servidor. Intenta detectar cualquier error/advertencia. – nc3b

+0

Lo hice, no dice nada en absoluto. – DfKimera

+0

Estoy teniendo el mismo problema. ¿Has resuelto tu problema? –

Respuesta

2

Los servidores web también se pueden configurar para limitar el tamaño de las solicitudes. Si está utilizando Apache, consulte la directiva LimitRequestBody.

+0

Eché un vistazo a la configuración de Apache, la directiva LimitRequestBody no está allí, así que supongo que está en el valor predeterminado (0, o sin límite) – DfKimera

+0

Resulta que este fue el problema. Excepto la configuración de WHM/cPanel que tenía en ese momento, me resultó realmente difícil cambiar verdaderamente la directiva LimitRequestBody. Aumentar esto + post_max_size, subir el tamaño máximo y el límite de memoria debería resolver el problema. – DfKimera

+0

He intentado cambiar post_max_size, upload_max_size y límite de memoria, pero todavía estoy enfrentando el mismo problema. –

1

intente cargar pequeños archivos de 1 - 2 MB. Si aún no puede publicar el código.

Espero que haya agregado enctype = '/ multipart/form-data' en la definición del formulario.

+0

Lo hice, y los archivos pequeños sí funcionan. El problema aparece en archivos de 8MB +. Enctype está ahí. – DfKimera

0

¿En qué servidor se está ejecutando? Creo que algunos servidores OS tienen un límite de cantidad de archivos grandes que permiten. Este valor puede ser cambiado.

1

Ok, creo que tengo la solución. Debe verificar las directivas post_max_size y $_SERVER['CONTENT_LENGTH'], por lo tanto, si $ _SERVER ['CONTENT_LENGTH'] supera a la de mail_max_size significa que están intentando cargar demasiados datos.

$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; 
} 

solución tomada desde aquí: http://www.php.net/manual/en/features.file-upload.php#73762

Cuestiones relacionadas