2010-08-25 47 views
5

Estoy tratando de encontrar algún software que me ayude a cargar archivos realmente grandes (> 200 mb). Solo quiero subir un solo archivo, sin múltiples opciones. También me gustaría una barra de progreso simple si es posible.Subir archivo de archivos grandes PHP/AJAX

Me he encontrado con http://pixeline.be/experiments/jqUploader/ que es literalmente lo que necesito pero tiene un límite de 100mb por archivo, porque usa flash.

¿Alguien sabe de algo más que sea similar a esto, pero puede manejar archivos más grandes?

THX

Respuesta

1

Otra solución popular es http://www.swfupload.org/, pero supongo que puede sufrir el límite de 100 MB.

En cuanto a la cuestión del tamaño de los archivos grandes, de mi investigación parece que para cargar archivos de gran tamaño no hay otra opción que aumentar los valores de upload_max_filesize, post_max_size y max_execution time. Me pregunto cuáles son las implicaciones de seguridad de tener post_max_size configurado en, digamos, 500M? No es el problema del ancho de banda lo que me preocupa, son los posibles ataques DoS que pueden surgir al permitir que los atacantes envíen solicitudes de POST de 500M aleatorias al servidor. La mejor solución que puedo pensar para este problema es enviar cargas a un servidor diferente.

Hay una buena discusión de todo el tema aquí:

http://aaronwinborn.com/blogs/aaron/how-handle-large-file-uploads

Si alguna hackers Apache por ahí pueden arrojar alguna luz sobre las implicaciones de seguridad que tiene un valor muy grande para post_max_size que sería genial .

+1

Apache en sí mismo no se preocupa realmente de cuán grandes son los archivos, cosas de módulo como límites de 31/32 bits (2.1/4.2gig). Pero si tiene un límite de publicación muy grande, es posible vincular todos los elementos secundarios disponibles en el grupo de conexiones con cargas de larga duración y DOS en la máquina (así como el espacio de disco de escape). Esto es más difícil de hacer con límites más pequeños ya que las cargas se completarán más rápido y reciclarán las conexiones más rápido. Por supuesto, puede cerrar de golpe el servidor con intentos de conexión de todos modos. –

+0

max_execution_time solo afecta el tiempo de ejecución del script. Por lo tanto, no afecta el tiempo necesario para la carga real del archivo. Necesita aumentar ** max_input_time ** significativamente. Establece el tiempo máximo, en segundos, en que el script puede recibir datos (incluida la carga del archivo). El valor predeterminado es 60 segundos. – Jakar

+0

Por lo tanto, ** max_input_time ** debe ser de al menos 1500 si el tamaño máximo de archivo es de 500 MB. ** ¿Por qué? ** Porque la velocidad promedio de subida es de aproximadamente 500 kbps. O 1 MB cada 2 segundos. 500 (MB) * 2 seg = 1000 segundos. Y algunos usuarios pueden tener una conexión a Internet más lenta o utilizar parte del ancho de banda para otras tareas, por lo que un colchón de 500 o más sería bueno. http://us2.php.net/manual/en/features.file-upload.common-pitfalls.php – Jakar

0
+0

Thx por eso :). Dado que (y otras herramientas similares) simplemente usa el tipo de entrada html 'file' para procesar y cargar archivos ... ¿Crees que tener que cambiar los límites de carga de php crearía agujeros de seguridad? –

+0

Por supuesto. Alguien podría comer tu ancho de banda fácilmente. Pero considerando los agujeros de seguridad ahora antes de desarrollar lo que es bueno. Por lo tanto, puede hacer lo mejor para llenar esos agujeros temprano en lugar de más tarde. –

1

Recomendaría implementar un cargador de Java, como JumpLoader e integrarlo con su sistema actual. Tiene una amplia API y su interfaz JScript también es de fácil acceso. Puede, como lo hice, el código de su manejador del lado del servidor y que sea capaz de:

  1. archivo de la carga múltiple de
  2. subidos sin ningún límite en tamaño de archivo - Actualmente estoy luchando con límite de 2G de PHP en fopen(), pero espero que para resolver subir pronto
  3. particionado - fichero es subido en trozos
  4. integridad
  5. Transmisión - JumpLoader también puede calcular y enviar sumas de comprobación MD5 para cada partición y todo el archivo en sí, que se puede validar en el lado del servidor para ver si el paquete llegó bien o no.

Espero que ayude.