Autor Zpráva
Kcko
Profil
Dlouho dobu jsem pouzival peknou tridu od Alese Dostala


/**
 * trida pro stazeni souboru
 * tato trida umoznuje stejnou funkcnost jak v IE tak ve firefoxu
 * 
 * @author Dostal Ales
 * @version 1.1
 * @date 13.4.2006
 *
 */
 
class DownloadFile
{

/****************************** METODY TRIDY ******************************/

    /**
     * konstruktor tridy pro stazeni souboru
     * 
     * @param    String        $file        zdroj k souboru, ktery se bude stahovat
     * 
     */
    function ExecuteDL($file)
    {
        // zjisteni, zda soubor existuje
        if (!is_file($file)) { 
            die("<b>404 Soubor neexistuje!</b>"); 
        }
    
        // ziskani informaci o souboru
        $len = filesize($file);
        $filename = basename($file);
        $file_extension = strtolower(substr(strrchr($filename,"."),1));
    
        // nastaveni content-type pro vybrane soubory
        switch( $file_extension ) 
        {
            case "pdf": $ctype="application/pdf"; break;
            case "exe": $ctype="application/octet-stream"; break;
            case "zip": $ctype="application/zip"; break;
            case "doc": $ctype="application/msword"; break;
            case "xls": $ctype="application/vnd.ms-excel"; break;
            case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
            case "gif": $ctype="image/gif"; break;
            case "png": $ctype="image/png"; break;
            case "jpeg":
            case "jpg": $ctype="image/jpg"; break;
            case "mp3": $ctype="audio/mpeg"; break;
            case "wav": $ctype="audio/x-wav"; break;
            case "mpeg":
            case "mpg":
            case "mpe": $ctype="video/mpeg"; break;
            case "mov": $ctype="video/quicktime"; break;
            case "avi": $ctype="video/x-msvideo"; break;
    
            # tyto soubory nemohou byt stazeny
            case "php":
            case "htm":
            case "html":
            case "txt": die("<b>Není možné stahovat ". $file_extension ." soubory!</b>"); 
            break;
    
            default: $ctype="application/force-download";
        }
    
        # odeslani hlavicek
        session_cache_limiter("private"); # v IE nelze stáhnout dokument pres HTTPS
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
      
        # generuje typ pro content-type
        header("Content-Type: $ctype");
    
        # co stahuji
        $header="Content-Disposition: attachment; filename=".$filename.";";
        header($header );
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".$len);
        readfile($file);
        exit;
        
    } # public function __construct($file)
    
} # class APIDownloadFile


Problem nastal v tu chvili, kdy jsem si do htaccessu ZLIB kesovani


php_flag zlib.output_compression on
php_value zlib.output_compression_level 8 


V tuto chvili se mi nepodari napr. zadny ZIP ci RAR soubor rozbalit. Porovnaval jsem originalni soubor a stazeny po teto uprave pomoci
md5_file ( ci v PSPADU) a md5 kontrolni retezce uz nesouhlasi.

Ten zlib ty hlavicky nejak **********

Nesetkal se s tim nekdo? Vubec nevim kam mam sahnout
Davex
Profil
Na začátku skriptu vypni on-fly kompresi pomocí
ini_set('zlib.output_compression', 'Off'); 

Některé prohlížeče neumí stahované soubory po přenosu správně dekomprimovat a u některý typů souborů je komprese pro přenos zbytečná.
Kcko
Profil
Super, pomohlo!

Jeste bych se optal, kdybych nemel na hostingu moznost menit ini direktivy, lze to jeste jinym zpusobem napravit?
Davex
Profil
Kcko
Download skript se může umístit do samostatného podadresáře, kde se output_compression vypne pomocí .htaccess.
Kcko
Profil
Jasne, taky napad, DIKY MOC, zaviram :)
Toto téma je uzamčeno. Odpověď nelze zaslat.