Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/01/2003, 09:02
MartinAcevedo
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 22 años, 11 meses
Puntos: 0
Script que soporta resume

Aca termine el script de download que soporta resume para getright y download acelerator (y otros) es un poco basico y se puede mejorar.
Aclaracion: php debe funcionar como modulo ded apache, ya que usa la funcion getallheaders que es del apache.
Espero les sirva

<?
$headers = getallheaders();


$filename="archivo.exe";

//aca se obtiene la cabecera que nos dice desde que byte tenemos que enviar
//lo guardamos en $bytes.

if ($headers[Range]){
$pos=strpos ($headers[Range], "bytes=");
$pos2=strpos($headers[Range],"-");
$bytes=substr ($headers[Range], $pos+strlen("bytes="),$pos2-($pos+strlen("bytes=")));
}else{
$bytes=0;
}
settype ($bytes, "integer");




$tarchivo=filesize($filename)-$bytes;
$ttotal=filesize($filename);

error_reporting(0);

header("Last-Modified: " . gmdate("D, d M Y H:i:s T", filemtime($filename)));
header("Accept-Ranges: bytes");
header("Content-Length: " . $tarchivo);
header("Content-Disposition: attachment; filename="."archivo.exe");
//indicamos al cliente que bytes del archivo vamos a transferir
//en este caso es desde $bytes hasta el final del archivo
//que es lo que nos pide el get right normalmente
//se puede modifcar tomando el ultimo byte del rango
//para hacer mirroring tipo kazaa (seria una version mas avanzada)
header("Content-Range: bytes ".$bytes."-".($ttotal-1)."/".$ttotal);

header("Content-Type: application/octet-stream");

//abrimos el archvo
$fp = fopen($filename,'rb');

if (!$fp) {
echo "error de apertura";
exit();
}
//nos movemos hasta el byte donde debemos empezar a mandar informacion
rewind ($fp);
fseek ($fp, $bytes);

//mandamos el pedazo de archivo correspondiente
// la funcion fpassthru() es similar a readfile() en que manda el archivo por la salida estandar (mejor que usar un ciclo con fread adentro), la diferencia con readfile es que debe ser abierto con fopen, esta funcion devuelve todos los bytes por la salida estandar desde la posicion actual del puntero hasta el final del archivo
if(!fpassthru($fp)) {
echo "error de salida";
exit();
}




header("Connection: close");






exit();
?>
__________________
Martin