Pregunta

Tengo un formulario PHP para cargar archivos y funciona bien y muestra un mensaje de error si algo salió mal. Todo esto está bien.

El problema es cuando pruebo con un archivo realmente grande, simplemente actualiza la página como si no hubiera enviado un archivo, y ninguna de las variables $ _POST del formulario se envía al servidor.

Quiero mostrar un error al usuario, haciéndole saber que el archivo es demasiado grande. Sin embargo, no puedo hacer esto.

¿Alguien sabe lo que está pasando?

¿Fue útil?

Solución

Verifique su archivo ini de PHP, que gobierna el tamaño de un archivo que PHP permitirá cargar. Estas variables son importantes:

  • tamaño máximo de carga de archivos (upload_max_filesize)
  • tamaño máximo de datos de publicación (post_max_size)
  • límite de memoria (memory_limit)

Cualquier carga fuera de estos límites se ignorará o se eliminará, dependiendo de su configuración.

Esta sección en los documentos tiene el mejor resumen: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

EDITAR: también tenga en cuenta que la mayoría de los navegadores no enviarán cargas de más de 2 GB de tamaño. Este enlace está desactualizado, pero da una idea: http://www.motobit.com/help /scptutl/pa98.htm . ¿Alguien tiene una mejor fuente de información sobre esto?

También hay límites que puede imponer el servidor, como Apache: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

Para ver realmente lo que está sucediendo, probablemente debería verificar los registros de su servidor web, verificar el límite de carga del navegador (si está usando Firefox) e intentar ver si print_r($_FILES) genera algún número de error útil. Si todo lo demás falla, pruebe el monitor de tráfico de red en firebug. La clave es determinar si la solicitud va incluso al servidor y si es así como se ve la solicitud (incluidos los encabezados). Una vez que haya llegado tan lejos en la cadena, puede regresar y ver cómo PHP maneja la carga.

Otros consejos

Su $ _POST probablemente esté vacío porque la carga excedió la directiva post_max_size :

De la página de directivas de PHP :

  

Si el tamaño de los datos de publicación es mayor   que post_max_size, el $ _POST   y las superglobales $ _FILES están vacías .   Esto se puede rastrear de varias maneras,   p.ej. pasando la variable $ _GET a   la secuencia de comandos que procesa los datos, es decir   <form action="edit.php?processed=1"> y   luego verificando si $ _GET ['procesado']   está configurado.

no puede saber el tamaño del archivo que se está cargando, hasta que se carga por completo. así que si desea determinar el tamaño del archivo y luego mostrar un error para archivos grandes, primero debe cargar el archivo y luego verificar el tamaño del archivo. Para tener un archivo grande cargado, debe establecer 2 configuraciones en su archivo de configuración de php, php.ini. ábralo y busque " upload_max_filesize " y establezca el valor al valor máximo que desee. entonces debe establecer el valor máximo para los parámetros POST, porque los archivos cargados se reciben a través del método HTTP POST. encontrar " post_max_size " y configúrelo en un valor grande para.

Implementaría un script simple que realiza llamadas regulares de ajax para saber cuánto se ha realizado la carga. Luego puede implementar algún tipo de barra de progreso. Hay un par de ejemplos en la red:

http://martinjansen.com/ 2007/04/28 / file-upload-progress-bars-with-php /

max upload filesize (upload_max_filesize) tamaño máximo de datos de publicación (post_max_size) son las directivas que necesita establecer. Lo he probado con múltiples sistemas operativos, navegadores, etc. y estas son las dos únicas cosas por las que debe preocuparse.

aparte de las opciones según respondieron los antiguos usuarios:

max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)

también hay uno, cuando el archivo es muy grande o la línea está ocupada, se necesita mucho tiempo para ejecutar esta operación, que llegará al límite del límite de ejecución del script.

max_execution_time
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top