Foros del Web » Programando para Internet » PHP »

Duda con los uploads en PHP

Estas en el tema de Duda con los uploads en PHP en el foro de PHP en Foros del Web. Buen día a todos los del foro, esta es una consulta acerca de cual consideran como la mejor técnica para subir archivos mediante ajax a ...
  #1 (permalink)  
Antiguo 29/02/2016, 15:55
 
Fecha de Ingreso: febrero-2016
Mensajes: 6
Antigüedad: 8 años, 2 meses
Puntos: 0
Duda con los uploads en PHP

Buen día a todos los del foro, esta es una consulta acerca de cual consideran como la mejor técnica para subir archivos mediante ajax a un servidor apache con soporte a PHP.
1.- Mandar todos en una sola petición AJAX.
2.- Mandar de uno en uno los archivos haciendo múltiples llamadas AJAX.

Esta duda surge a a partir de:
Un sitio que tengo en internet, en el cual, en total hago carga de aprox. 200 archivos que se juntan a lo largo de un mes, xml no muy pesados de aprox 10 KB cada uno, el detalle esta en que el servicio de hosting en donde estoy alojado me bloquea la carga de archivos a 25, ya he solicitado cambios a los adminisnistradores pero las respuestas nulas y la falta de comunicación efectiva me ha hecho optar por desarrollar un script para subir archivos de a uno en uno con AJAX, el asunto es que no se que tan recomendable es esta técnica o que tanto puede afectar el desempeño del servidor o que recomiendan.

Como nota: los xml no los guardo en el servidor, los subo solo para leer y guardar parte de su información en una tabla.

Por sus aportes gracias...
  #2 (permalink)  
Antiguo 29/02/2016, 16:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con los uploads en PHP

Pues no se trata de una técnica descabellada, muchos servicios actuales permiten eso mismo a través de Javascript.

Es bastante común, tu tranquilo que no pasará nada.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/03/2016, 12:40
 
Fecha de Ingreso: abril-2015
Ubicación: Bogotá D.C - Colombia
Mensajes: 106
Antigüedad: 9 años
Puntos: 11
Respuesta: Duda con los uploads en PHP

Hola realmente la técnica que quieres usar si tiene un pequeño problema, y lo digo por experiencia propia...

Generalmente para esto es claro que vas a usar un bucle, por tanto el bucle correrá el array de Input Files que existan en el Dom del formulario.

El problema es claro, El servidor recibirá peticiones AJAX en cuestión de milisegundos, es posible que te logre responder, pero por lo regular algunos servidores y hoy en día incluso Google Chrome bloquea peticiones que superen cierta cantidad en cuestión de segundos, esto solo lo hacen por seguridad, pues generalmente este tipo de peticiones son de tipo malware y/o ataques a los sitios.

Cuando te dije, que por experiencia tuve problemas al realizar la tarea que necesitaba con la técnica que deseas usar, el problema que tuve fue que no todos los archivos subían, pues en algunas respuestas AJAX me generaba un error 500 (Internal Server ERROR) por tanto mi solución para no perder el trabajo que ya había realizado, fue poner un setTimeout() de JavaScript, solo así lograrás hacer que tu sistema no haga pensar ni al navegador o tu servidor que eres un bot, malware o posible ataque, o en los peores casos saturar tu servidor.

A continuación te comparto un ejemplo de la solución alterna para que no pierdas el trabajo que ya tienes, generalmente es un for con la supuesta lista de Input Files del formulario, y luego al iterar envió peticiones AJAX con un tiempo totalmente diferente de ejecución al multiplicar el tiempo entre peticiones por la posición actual del array que se esté recorriendo, así todas se ejecutarán una detrás de la otra... los 200 milisegundos que puse no lo cambies, déjalo tal cual, con solo ese pequeño espacio de tiempo bastará para darle un respiro al sistema que estás implementando...

Código Javascript:
Ver original
  1. var inputFiles = ["file1","file2","file3"];
  2. var time = 200;
  3.  
  4. for(var i = 0; i < inputFiles.length; i++){
  5.   setTimeout(function(){console.info('Se ejecuta tarea, en tu caso la petición AJAX de cada iteracción')},(time*i));  
  6. }

Cualquier duda no olvides pregunar, Éxitos! :D
  #4 (permalink)  
Antiguo 01/03/2016, 12:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda con los uploads en PHP

Creo una mejor solución sería usando Promise, así vas ejecutando cada upload en secuencia, el hack de usar setTimeout() es igual bastante frágil.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 30/03/2016, 12:27
 
Fecha de Ingreso: abril-2015
Ubicación: Bogotá D.C - Colombia
Mensajes: 106
Antigüedad: 9 años
Puntos: 11
Respuesta: Duda con los uploads en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Creo una mejor solución sería usando Promise, así vas ejecutando cada upload en secuencia, el hack de usar setTimeout() es igual bastante frágil.
Hola tío, oye gracias a ti, he conocido un nuevo tema y muy interesante, en realidad no sabía que había una manera de lanzar peticiones asíncronas de ese modo con JavaScript, siempre me las ingeniaba de otra formas para lanzar esas peticiones asíncronas que después me ejecutaran los callbacks que le pasara, y la solución que planteas me ha llevado a investigar un poco y conocer este tema que estoy seguro lo usaré en todos mis proyectos de ahora en adelante cuando lo sea necesario...

Pero bueno, a la final retomando lo que iba a comentar acerca de tu aporte, es que setTimeOut solo es una función que lanza un callback después de esperar un debido tiempo que le pasemos, por tanto lo usé de una manera sencilla para que el tío que preguntó, no tuviera más lios con el tema, y a la final no es una mala solución.

Pero Promise con lo que logré interpretar en 2 minutos de lectura y análisis de lo que hace, es simplemente un objeto que te permite ejecutar tareas de modo asíncrono y conocer los estados de cada proceso, con el cual para este caso, podríamos hacer un envió secuencial de estos archivos haciendo control de los callbacks que nos deja conocer Promise por cada petición, una solución alterna con mucho más presentación sin ninguna duda..

Etiquetas: ajax
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:03.