Barra de progreso de Uploads en PHP sin Flash

Hace ya tiempo que conozco/uso APC, una librería para PHP cuyo propósito es acelerar la ejecución y optimizar el consumo de recursos de nuestros scripts mediante el cacheo de opcodes.

Para mi sorpresa, hoy descubro que APC cuenta además con algunos extras como la directiva rfc1867 (compatible con php 5.2 y superior) que nos permite crear barras de progreso para uploads, sin hacer uso de flash, como se muestra en el siguiente video.

Lo primero es instalar APC, puedes seguir la guía de php.net. Una vez instalado será suficiente con añadir estas dos líneas en el php.ini y reiniciar apache.

extension=php_apc.dll
apc.rfc1867 = On

El formulario
Upload form
El formulario de upload requerirá de un identificador único, bastara con añadir un campo oculto;
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<?php echo $unique_id?>"/>

PHP
Llegado a este punto toca crear un script php que nos muestre el estado del envió, este será consultado cada cierto tiempo con llamadas ajax.


<?php
if(isset($_GET['progress_key'])) {
$status = apc_fetch('upload_'.$_GET['progress_key']);
echo $status['current']/$status['total']*100;
}
?>

Javascript
Ya solo nos quedaría el código javascript que lanza las llamadas ajax. Es importante no olvidarnos de enviar el identificador del upload en la llamada.


function getProgress(){
GDownloadUrl("getprogress.php?progress_key=<?php echo($unique_id)?>",
function(percent, responseCode) {
document.getElementById("progressinner").style.width = percent+"%";
if (percent < 100){
setTimeout("getProgress()", 100);
}
});
}
function startProgress(){
document.getElementById("progressouter").style.display="block";
setTimeout("getProgress()", 1000);
}

Y Eso es todo. En este y este enlace encontrareis más información y un .zip en descarga directa con todos los archivos ,a modo de demo, listos para probar.

Compartir:
  • Facebook
  • Twitter
  • Meneame
  • Google Bookmarks
  • del.icio.us
  • BarraPunto
  • Bitacoras.com
  • Netvibes
  • MySpace
  • Technorati
  • email
  • PDF

Ningun post realacionado

5 Respuestas en “Barra de progreso de Uploads en PHP sin Flash”

  1. HaxeR  on Septiembre 17th, 2009

    Abra que probarlo :)

  2. Joan  on Septiembre 17th, 2009

    Mira que llevo tiempo y tiempo buscando y es una de las cosas que más me ha costado encontrar. Al final me quedé con una solución de jQuery, pero esto es realmente interesante.

    Gracias

  3. flmn  on Septiembre 17th, 2009

    Fe de erratas:
    En lo referente a el php.ini la linea “extension=php_apc.dll” estaba duplicada. Se me fue la mano con el copy & paste, sorry

  4. Fran  on Octubre 15th, 2009

    ¿Y si el formulario tiene múltiples archivos? ¿valdría esta solución?

  5. flmn  on Octubre 20th, 2009

    Fran:
    Nunca he hecho la prueba y no podría garantizartelo pero, así a priori, debería funcionar sin problema


Deja un comentario

You must be logged in to post a comment.