Foros del Web » Programando para Internet » PHP »

Mostrar progreso en backup

Estas en el tema de Mostrar progreso en backup en el foro de PHP en Foros del Web. Hola amigos! Estoy realizando un sistema de backup de archivos de dos carpetas del servidor con PHP. Una se llama cartas y otra productos. Dentro ...
  #1 (permalink)  
Antiguo 03/09/2012, 10:37
 
Fecha de Ingreso: diciembre-2011
Ubicación: Villa Lugano
Mensajes: 86
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Mostrar progreso en backup

Hola amigos!
Estoy realizando un sistema de backup de archivos de dos carpetas del servidor con PHP. Una se llama cartas y otra productos. Dentro de ellas se almacenan imágenes. El backup lo realizo en un archivo zip.
El tema es que la página debería mostrar los siguientes mensajes en cada proceso terminado (entre corchetes comento):

[abro un nuevo zip: ]
"Procesando carpeta cartas.............. [leo archivos y agrego al zip] echo"
"Procesando carpeta productos........ [leo archivos y agrego al zip] echo"
[cuando termino la operación..]
Terminado. Descargar

Las carpetas contienen muchos archivos y tarda en realizarse la operación. El navegador queda leyendo la página pero no da el resultado en la pantalla.
Alguna sugerencia?
muchas gracias!
  #2 (permalink)  
Antiguo 04/09/2012, 06:47
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Mostrar progreso en backup

Pues asi a bote pronto creo que la manera mas sencilla es utilizar ajax para mostrar el progreso. Si conoces mas o menos ajax sabras que tiene 4 estados aunque veo que la mayoria solo usa el primero y el ultimo. En el estado 1 mientras procesa los datos yo pondria un gif animado con el tipico esperando junto a un mensaje y luego cuando ya cargue (es decir estado 4) cargaria los otros mensajes ya dentro del archivo php que procesa los archivos.

No se si sea la mejor manera de hacerlo pero si la que mas uso.
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 04/09/2012, 06:54
 
Fecha de Ingreso: diciembre-2011
Ubicación: Villa Lugano
Mensajes: 86
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Mostrar progreso en backup

Muy bueno! creo que Ajax es lo que necesito.
Muchas gracias!
saludos
  #4 (permalink)  
Antiguo 05/09/2012, 12:33
 
Fecha de Ingreso: diciembre-2011
Ubicación: Villa Lugano
Mensajes: 86
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: Mostrar progreso en backup

He hecho el script con Ajax pero no me funciona como pretendo. La idea es que el dibujito de "progreso" (gif animado) no desaparezca hasta que no termine de construir el zip. El problema es que tarda mucho porque es una gran cantidad de imágenes y termina tirando error en la página, cuando en realidad en el servidor sigue comprimiendo los archivos.

Cito el código:

Código:
// HTML:

<button id="miBoton">Procesar</button>
<div id="comienzo"></div><div id="base"></div>

<script type="text/javascript">
$('#miBoton').click( function() {
			var a = confirm("Est\xe1s seguro de comenzar?");
			if(!a) return false;
			var g = document.getElementById('miBoton');
			g.disabled = 'disabled';
			$('#comienzo').html("Procesando...");
			$('#base').html("<img src='imagenes/progress.gif' />");
			$.ajax({
				type: 'POST',
				url: 'response.php',
				data: 'bkp=base',
				success: function(data){
					$('#base').html(data);
				}
			})
	})
</script>

// PHP (response..php)
switch($_POST["bkp"]) {
	case "base":
		if(miBackup()) echo "<img src='imagenes/tilde.png' />";
		else echo "<span style='color:red;'>Error</span>";
		break;
       case ...
}

function miBackup() {
	$zip = new ZipArchive();
	$arch = "misBackups/backup.zip";	
	// Leemos el directorio cartas
	$conexDir = opendir("../imagenes/cartas");
	$elemento = array();
	while($file = readdir($conexDir)) {
		if(($file != '.') && ($file != '..')) {
			if(!is_file($file)) {
				$elemento[] = $file;
				}
        }
    }	
	closedir($conexDir);
	// Agregamos las cartas al zip. 
	if($zip->open($arch,ZIPARCHIVE::CREATE) === true) {
		$zip->addEmptyDir("cartas");
		for($i=0;$i<count($elemento);$i++) {
			$zip->addFile("../imagenes/cartas/".$elemento[$i],"cartas/".$elemento[$i]);
		}
		$zip->close();
		return true;
	}
	else return false;
}
}
Muchas gracias!
  #5 (permalink)  
Antiguo 05/09/2012, 18:53
 
Fecha de Ingreso: diciembre-2011
Ubicación: Villa Lugano
Mensajes: 86
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Mostrar progreso en backup

alguna idea porfa? Gracias!
  #6 (permalink)  
Antiguo 05/09/2012, 19:40
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Mostrar progreso en backup

¿En cuanto tiempo esta configurado php para ejecutar el script? Como supongo sabras php tiene un limite de 30 segundos para ejecutar los scripts. Es posible que al ser un proceso largo se cuelgue por ese motivo.

http://php.net/manual/es/function.set-time-limit.php

Asi a bote pronto es lo que se me ocurre. No manejo muy bien ajax en jquery (estoy mas acostumbrado al ajax con javascript) pero parece que estuviera bien configurado.
__________________
Blog de humor http://elcuasatar.net63.net/
  #7 (permalink)  
Antiguo 06/09/2012, 06:47
 
Fecha de Ingreso: diciembre-2011
Ubicación: Villa Lugano
Mensajes: 86
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Mostrar progreso en backup

Muchas gracias Cuasatar!
Tu apreciación sobre el tiempo límite es correcta pero tengo configurado el servidor en 1200. La respuesta del servidor a la página la envía aprox. a los 2,5 min. (controlado por cronómetro). Sin embargo, el zip sigue corriendo en el servidor hasta completarse. No sé cómo seguir.
Se me ocurrió armar el zip de a pedazos. Juntar de a 100 Mb enviando peticiones con Ajax.
Aguardo comentarios...
  #8 (permalink)  
Antiguo 06/09/2012, 13:58
 
Fecha de Ingreso: diciembre-2011
Ubicación: Villa Lugano
Mensajes: 86
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: Mostrar progreso en backup

¿alguna idea?
¿es correcto lo que pienso?
Mil gracias!

Etiquetas: backup, progreso
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 13:00.