2010-08-22 21 views
6

Tengo un problema extraño al cargar archivos de gran tamaño en PHP.Problema extraño al cargar archivos de gran tamaño

En php.ini, max_execution_time se establece en 30, post_max_size se establece en 32M, upload_max_filesize se establece en 32M. Cuando traté de cargar un archivo de tamaño 40.2 MB, no muestra ningún error. La variable $_FILES tiene el valor array(0) { } y $_FILES['userfile'] muestra NULL.

Si el tamaño del archivo es mayor que el valor ajustado en el php.ini, entonces debería devolver el mensaje de error

UPLOAD_ERR_INI_SIZE, Valor: 1; El archivo cargado excede la directiva upload_max_filesize en php.ini.

Pero tampoco muestra ningún error (ya que $_FILES es una matriz vacía). No tengo ni idea de por qué está sucediendo esto.

Cuando cambio en php.ini y establezco que el valor de pos_max_size es 64M, upload_max_filesize está configurado en 64M, entonces funciona bien. Entonces, decidí usar el siguiente código, en lugar de cambiar el archivo php.ini.

ini_set('upload_max_filesize', '64M'); 
ini_set('post_max_size', '64M'); 
ini_set('max_execution_time', 300); 

Incluso intenté aumentar max_execution_time. Aún así, estoy teniendo el mismo problema. ini_set() no funciona aquí.

+0

No estoy seguro de por qué no se había planteado el error UPLOAD_ERR_INI_SIZE, pero puedo decir que la fijación de upload_max_filesize o post_max_size con ini_set no tiene ningún efecto debido a que estos no se pueden establecer un tiempo de ejecución, de acuerdo con esta lista ini : http://www.php.net/manual/en/ini.list.php –

Respuesta

19

Para que el archivo de 40 MB falle con el error de carga, debe aumentar el valor de post_max_size, si excede el valor de esa variable, obtiene una matriz $ _FILES vacía. Ver the manual

Si el tamaño de los datos de entrada es mayor que post_max_size , el $ _POST y $ _FILES superglobales están vacías.

Además, ini_set() no está funcionando allí porque dos de las variables que están tratando de cambiar son PHP_INI_PERDIR y por lo tanto necesita ser cambiado en php.ini o en .htaccess o httpd.conf. Usted debe tratar el archivo de 40 MB con, por ejemplo, these settings in .htaccess

php_value upload_max_filesize 32M 
php_value post_max_size 64M 
php_value max_execution_time 300 
+0

La mejor respuesta, excepto que no puede establecer upload_max_filesize y post_max_size usando ini_set(), solo a través de archivos .conf o .ini. –

+0

@Michael: Sí, me di cuenta de que más tarde, ya arreglado, gracias –

+0

¡En realidad esto es estúpido! ¿Qué sucede si no quiero permitir que los invitados de mis sitios carguen más de 2 MB (cuz de la inundación que pueden hacer) pero si son miembros para subir hasta 150 MB? –

1

Hay otra opción que puede que tenga que mirar, Apache de LimitRequestBody.

Si el archivo excede eso, la carga puede bloquearse incluso antes de que llegue a PHP.

Apache Documentation

+0

Este también es un buen punto. Nunca lo supe Gracias por compartir. – Debiprasad

1

ini_set() no está funcionando aquí.

Los valores que están tratando de cambiar con ini_set(), a excepción de max_execution_time, no se puede cambiar con ini_set().
En el list of php.ini directives, se informa que son del tipo PHP_INI_PERDIR, lo que significa (como se explica en Where a configuration setting may be set) que pueden cambiarse en php.ini, .htaccess o httpd.conf. Las configuraciones que se pueden cambiar con ini_set() son las marcadas como PHP_INI_USER.

+0

Quiero marcar esto como una respuesta aceptada, pero Stack Overflow permite marcar solo una respuesta como respuesta aceptada, que ya he marcado. – Debiprasad

+0

@Debiprasad: no es posible tener dos respuestas aceptadas; debe anular la selección de la selección anterior, antes de seleccionar otra respuesta como aceptada. – kiamlaluno

0

DE SERVIDOR:

En cPanel búsqueda de php, se encuentra "Seleccionar versión de PHP" en Software. Software -> Seleccionar versión PHP -> Cambiar a Opciones PHP -> Cambiar valor -> guardar.

DE LOCAL:

encontrar el archivo del PHP ini (valores de configuración) en la carpeta xampp php bajo. Cambio post_max_size = 40M y upload_max_filesize = 40M

Cuestiones relacionadas