Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    273

    Problema scaricare file da IE6

    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
    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);
    	}
    	
    }
    
    ?>
    Questo invece è get.php ipotizzando che $filename contiene il nome del file da scaricare preso da database sql.
    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
    Il link con cui passo l'id del file è :
    codice:
    http://********/get.php?id=$id_file
    Con ie6 non funziona invece di scaricare il file cerca di scaricare una pagina html..
    Con firefox e opera funziona perfettamente.

    Quale può essere il problema???

  2. #2
    Tutto quel codice per un download forzato? Prova ad usare gli headers

    $download="nome_file"

    header("Content-Type: application/force-download");

    header("Content-Disposition: attachment; filename=" . basename($download) );

    readfile($download);



  3. #3
    Originariamente inviato da silverwings
    Tutto quel codice per un download forzato? Prova ad usare gli headers

    $download="nome_file"

    header("Content-Type: application/force-download");

    header("Content-Disposition: attachment; filename=" . basename($download) );

    readfile($download);



    Scusatemi se mi intrometto,

    ma quei Software che scaricano tutto il sito non riescono a ricreare l'URL di dove si trovano i file e quindi a tirarli giù tutti ???

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.