Descargar archivo a servidor y mostrar porcentage de progreso

andilien Seguir

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
26 Nov 2011
Mensajes
52
Hola a todos, estoy haciendo una aplicación web y necesito saber cómo descargar un archivo remoto al servidor web, y mostrar al usuario el porcentage descargado asi como el tamaño descargado y el tamaño total, ¿alguien sabría cómo hacerlo?
Gracias gente!
 

sevilla666

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
30 Nov 2016
Mensajes
191
Yo tengo implementado este:
progressbar
Por seguridad tendrías que utilizar funciones como
Insertar CODE, HTML o PHP:
finfo_open(FILEINFO_MIME_TYPE);


Supongo archivo del cliente > servidor-
 
Última edición:

andilien

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
26 Nov 2011
Mensajes
52
Yo tengo implementado este:
progressbar
Por seguridad tendrías que utilizar funciones como
Insertar CODE, HTML o PHP:
finfo_open(FILEINFO_MIME_TYPE);


Supongo archivo del cliente > servidor-
Gracias por la respuesta, pero a lo que me refería era a la hora de descargar el archivo al servidor, por ejemplo:

Hay un formluario con un campo de texto en el que tienes que poner el enlace a un archivo (http:://ejemplo.com/archivo.zip) y un botón para descargar, se descargaría al servidor y mientras se descarga mostraría una barra de progreso con el porcentage descargado asi como el tamaño descargado y el tamaño total.
 

sevilla666

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
30 Nov 2016
Mensajes
191
Ok entiendo que un usuario pondrá un enlace en tu servidor, y tu servidor descargara el archivo del enlace en TU servidor.

A mi a primeras me parece que tendrías que descargarlo con la librería libcurl y para información de bytes subidos, velocidad etc, para luego calcular y mostrar porcentajes, usando AJAX claro, miraría curl_getinfo.


Aún así te escribo esto sin mirar ninguna información y sin haber probado nada.
A ver si a alguien por el foro te da mejor idea.

Saludos
 
Última edición:

aperpen

Gamma
Programador
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
1 May 2014
Mensajes
235
Te he preparado este "script", espero que te sirva:
PHP:
<?php
ob_start();

echo '<pre>';
echo 'Iniciando descarga ...<br />';

ob_flush();
flush();

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://aperpen.com/file.zip');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progreso');
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FILE, fopen('/downloads/file.zip', 'w+'));
$html = curl_exec($ch);
curl_close($ch);


$tamano_total = 0;
function progreso($curl, $tamano, $descargado, $upload_size, $uploaded)
{
    global $tamano_total;
    if(reduceoutput(300))
        return;
    
    if($tamano_total > 0){
         echo 'Descargado: ',$descargado/1000,'KB de ',$tamano_total, 'KB (',round($descargado * 100/$tamano,2),'%) Velocidad: '.velocidad($descargado/1000).'<br />';
    sleep(0.5);
    }
    else
        $tamano_total = round($tamano/1000, 2);
    
    ob_flush();
    flush();
}

/* FUNCION PARA REDUCIR LA CANTIDAD DE INFORMACION MOSTRADA */
$i = 0;
function reduceoutput($r){
    global $i;
     if($i < $r){
        $i = $i+1;
        return true;
    }
    
    if($i == $r)
        $i = 0; 
    return false;
}


/** LAST DOWNLOADED */
$lastdownloaded;
$lasttime;
function velocidad($downloaded_total){
    global $lastdownloaded, $lasttime;
    if(empty($lastdownloaded) || empty($lasttime)){
        $lasttime = microtime(true);
        $lastdownloaded = $downloaded_total;
        return;
    }else{
        $time = microtime(true);
        $downloaded = $downloaded_total-$lastdownloaded;
        $spenttime = round(($time-$lasttime), 5);
        $lasttime = $time;
        $lastdownloaded = $downloaded_total;
        $speed = $downloaded/$spenttime;
        return round($speed/1000, 2).'MB/s';
    }
    
}
echo 'Transferencia completada';
?>

Te explico, lo básico:
PHP:
curl_setopt($ch, CURLOPT_URL, 'http://aperpen.com/file.zip');

Ahí debes cambiar lo que dice: http:// aperpen.com/file.zip por el archivo a descargar.

PHP:
curl_setopt($ch, CURLOPT_FILE, fopen('/downloads/file.zip', 'w+'));
Ahí cambias /downloads/file.zip por la ruta donde quieres guardar el archivo.

PHP:
if(reduceoutput(300))
Esa linea simplemente es para reducir el numero de mensajes mostrado. Si crees que se muestra muy poca información del progreso o demasiada puedes reducir o aumentar ese 300
 
Arriba