A continuación, os voy a mostrar un código muy tonto pero extremadamente útil.
Cuando necesitéis lanzar un proceso en php de cierta duración, y queráis conocer el avance del mismo, podéis hacer una barra de progreso fácilmente con las siguientes líneas de código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<? header( 'Content-type: text/html; charset=utf-8' ); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Documento sin título</title> <style> .progreso { width: 100px; height: 20px; border:1px solid black; float:left;} .avance { height:20px; float:left; background: red; } </style> </head> <body> <div class="progreso"> <div class="barra"> <? for($i=0;$i<10;$i++) { echo '<span style="width:10px;" class="avance"></span>'; flush(); ob_flush(); sleep(5); } ?> </div> </div> </body> </html> |
Evidentemente, el ancho del progreso (en px) habrá que calcularlo de forma dinámica según el número de instrucciones o ciclos de vuestro script, pero en esencia, con esas líneas tan estúpidas todo os será un poquito más fácil.
Además, con ello evitáis el timeout del navegador. Si el proceso es extremadamente largo, podéis poner otro par de líneas salvadoras en la cabecera del script y éste se ejecutará…sí o sí.
1 2 3 4 |
// si el usuario cierra el navegador, el script sigue ejecutándose ignore_user_abort(true); // cancela el límite de tiempo de ejecución de php set_time_limit(0); |
Ya os veo a todos pensando en hacer una fantástica newsletter…. Eso, próximamente.