Vi spiego la situazione in breve...
passo a get.php un id di un file.
get.php cerca nel database sql il percorso del file e tramite la classe sottocitata forza il download:
class.httpdownload.php
Questo invece è get.php ipotizzando che $filename contiene il nome del file da scaricare preso da database sql.codice:<? /*------------------ | Download Handler | ------------------*/ /* @author Nguyen Quoc Bao <quocbao.coder@gmail.com> visit http://en.vietapi.com/wiki/index.php/PHP:_HttpDownload for class information Please send me an email if you find some bug or it doesn't work with download manager. I've tested it with - Reget : http://reget.com - FDM : http://freefiledownloadmanager.org @version 1.1 @desc A simple object for processing download operation , support section downloading @distribution It's free as long as you keep this header . @sample 1: File Download $object = new httpdownload; $object->set_byfile($filename); //Download from a file $object->use_resume = true; //Enable Resume Mode $object->download(); //Download File 2: Data Download $object = new httpdownload; $object->set_bydata($data); //Download from php data $object->use_resume = true; //Enable Resume Mode $object->set_filename($filename); //Set download name $object->set_mime($mime); //File MIME (Default: application/otect-stream) $object->download(); //Download File 3: Manual Download $object = new httpdownload; $object->set_filename($filename); $object->download_ex($size); //output your data here , remember to use $this->seek_start and $this->seek_end value :) */ class httpdownload { /*---------------- | Class Variable | ----------------*/ /** $handler : Object Handler $use_resume : Support Resume $data : Download Data $data_len : Data len $filename : Download File Name $mime : File mime $bufsize : BUFFER SIZE $seek_start : Start Seek $seek_end : End Seek **/ var $handler = array('readfile' => false , 'header' => false,'fopen'=>false,'fclose'=>false,'fread'=>false,'fseek' => false); var $use_resume = true; var $data = null; var $data_len = null; var $filename = null; var $mime = null; var $bufsize = 2048; var $seek_start = 0; var $seek_end = -1; /*------------------- | Download Function | -------------------*/ /** pre_download() : Pre Download Function download() : Download all file set_byfile() : Set data download by file set_bydata() : Set data download by data set_filename() : Set file name set_mime() : Set file mime download_header() : Send header download_ex() : Manual Download **/ function pre_download() { global $HTTP_SERVER_VARS; if ($this->mime == null) $this->mime = "application/octet-stream"; if (isset($_SERVER['HTTP_RANGE']) || isset($HTTP_SERVER_VARS['HTTP_RANGE'])) { if (isset($HTTP_SERVER_VARS['HTTP_RANGE'])) $seek_range = substr($HTTP_SERVER_VARS['HTTP_RANGE'] , strlen('bytes=')); else $seek_range = substr($_SERVER['HTTP_RANGE'] , strlen('bytes=')); $range = explode('-',$seek_range); if ($range[0] > 0) { $this->seek_start = intval($range[0]); } if ($range[1] > 0) $this->seek_end = intval($range[1]); else $this->seek_end = -1; } else { $this->seek_start = 0; $this->seek_end = -1; } if ($this->seek_start < 0 || !$this->use_resume) $this->seek_start = 0; return true; } function download_ex($size) { $this->pre_download(); ignore_user_abort(true); //Use seek end here if ($this->seek_start > ($size - 1)) $this->seek_start = 0; if ($this->seek_end <= 0) $this->seek_end = $size - 1; $this->download_header($size,$seek,$this->seek_end); return true; } function download() { $this->pre_download(); $seek = $this->seek_start; ignore_user_abort(true); $size = $this->data_len; if ($size === null) { $size = filesize($this->data); if ($seek > ($size - 1)) $seek = 0; if ($this->filename == null) $this->filename = basename($this->data); $res =& $this->fopen($this->data,'rb'); if ($seek) $this->fseek($res , $seek); if ($this->seek_end < $seek) $this->seek_end = $size - 1; $this->download_header($size,$seek,$this->seek_end); //always use the last seek $size = $this->seek_end - $seek + 1; while (!connection_aborted() && $size > 0) { if ($size < $this->bufsize) echo $this->fread($res , $size); else echo $this->fread($res , $this->bufsize); $size -= $this->bufsize; } $this->fclose($res); } else { if ($seek > ($size - 1)) $seek = 0; if ($this->seek_end < $seek) $this->seek_end = $this->data_len - 1; $this->data = substr($this->data , $seek , $this->seek_end - $seek + 1); if ($this->filename == null) $this->filename = time(); $size = strlen($this->data); $this->download_header($this->data_len,$seek,$this->seek_end); while (!connection_aborted() && $size > 0) { echo substr($this->data , 0 , $this->bufsize); $this->data = substr($this->data , $this->bufsize); $size -= $this->bufsize; } } } function download_header($size,$seek_start=null,$seek_end=null) { $this->header('Content-type: ' . $this->mime); $this->header('Content-Disposition: attachment; filename="' . $this->filename . '"'); if ($seek_start && $this->use_resume) { $this->header("Content-Length: " . ($seek_end - $seek_start + 1)); $this->header('Accept-Ranges: bytes'); $this->header("HTTP/1.0 206 Partial Content"); $this->header("status: 206 Partial Content"); $this->header("Content-Range: bytes $seek_start-$seek_end/$size"); } else $this->header("Content-Length: $size"); } function set_byfile($dir) { if (is_readable($dir) && is_file($dir)) { $this->data_len = null; $this->data = $dir; return true; } else return false; } function set_bydata($data) { $this->data = $data; $this->data_len = strlen($data); return true; } function set_filename($filename) { $this->filename = $filename; } function set_mime($mime) { $this->mime = $mime; } /*---------------- | Other Function | ----------------*/ /** header() : Send HTTP Header readfile() : Get File content **/ function header($var) { if ($this->handler['header']) return @call_user_func($this->handler['header'],$var); else return header($var); } function readfile($dir) { if ($this->handler['readfile']) return @call_user_func($this->handler['readfile'],$dir); else return @implode('' , @file($dir)); } function &fopen($file,$mode) { if ($this->handler['fopen']) return @call_user_func($this->handler['fopen'],$file,$mode); else return fopen($file,$mode); } function fclose($res) { if ($this->handler['fclose']) return @call_user_func($this->handler['fclose'],$res); else return fclose($res); } function fseek($res,$len) { if ($this->handler['fseek']) return @call_user_func($this->handler['fseek'],$res,$len); else return fseek($res,$len); } function &fread($file,$size) { if ($this->handler['fread']) return @call_user_func($this->handler['fread'],$file,$size); else return fread($file,$size); } } ?>
Il link con cui passo l'id del file è :codice:$object = new httpdownload; $object->set_byfile($filename); //Download from a file $object->set_filename($Name); $object->use_resume = true; //Enable Resume Mode $object->download(); //Download File
Con ie6 non funziona invece di scaricare il file cerca di scaricare una pagina html..codice:http://********/get.php?id=$id_file
Con firefox e opera funziona perfettamente.
Quale può essere il problema???

Rispondi quotando
