Autor Zpráva
Fisak
Profil
Dobrý den. Našel jsem na internetu skript na stahování. Bohužel mi nějak nefachá. Mohl by mi někdo říct prosím co dělám špatně?

function download_file($file) 
{ 
    if(isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT'])) 
    { 
        ini_set( 'zlib.output_compression','Off' ); 
    } 
    header ('Content-Disposition: attachment; filename="'.basename($file).'"'); 
    header ('Expires: '.gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y"))).' GMT'); 
    header ('Accept-Ranges: bytes'); 
    header ('Cache-control: no-cache, must-revalidate'); 
    header ('Pragma: private'); 

    $size = filesize($file); 
    if(isset($_SERVER['HTTP_RANGE'])) 
    { 
        list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']); 
        str_replace($range, "-", $range); 
        $size2=$size-1; 
        $new_length=$size2-$range; 
        header("HTTP/1.1 206 Partial Content"); 
        header("Content-Length: $new_length"); 
        header("Content-Range: bytes $range$size2/$size"); 
    } 
    else 
    { 
        $size2=$size-1; 
        header("Content-Range: bytes 0-$size2/$size"); 
        header("Content-Length: ".$size); 
    } 

    if ($file = fopen($file, 'rb')) 
    { 
        while(!feof($file) and (connection_status()==0)) 
        { 
            print(fread($file, 1024*8)); 
            flush(); 
        } 
        $status = (connection_status()==0); 
        fclose($file); 
    } 
    return($status); 
} 

download_file("/uploads/file.rar");
Tori
Profil
Fisak:
Bohužel mi nějak nefachá.
Jak konkrétně? Nevadí tam ta absolutní adresa ve filesystému (ř.44)?
Fisak
Profil
Tori:
a mohu se zeptat jak jinak by tam měla být ta cesta? Já již vyzkoušel všechny možnosti snad :(
Tori
Profil
Fisak:
Myslela jsem to tak, jestli tam nemá být spíš něco jako /var/www/www.mujweb.tld/uploads/file.rar. Ale jestli opravdu používáte adresář /uploads (asi na VPS?), tak je to samozřejmě v pořádku.
Fisak
Profil
Tori:
Stále to nejde. Jakmile to zkouším na localhostu tak to jde v pohodě ale když to zkusím na endoře tak mi to stáhne soubor který má 0kb
Norman
Profil
Fisak:
Je pěkné, že si našel script na stahování, ale o dost lepší by bylo kdyby si nám řekl na co ho potřebuješ.. Čeho chceš docílit?
Tori
Profil
Fisak:
mi to stáhne soubor který má 0kb
HTTP hlavička Content-Length má očekávanou hodnotu, nebo taky nula? viz clearstatcache
Je nějaký rozdíl v tom, když místo celého cyklu s fread apod. použijete jen obyč. echo file_get_contents?
Zkoušel jste si logovat, co se ve skriptu děje, kam až se dostane, jestli nedojde k timeoutu, atd.?
Čistě ze zvědavosti: k čemu je řádek 17, když se jednak s návratovou hodnotou vůbec nepracuje, a pokud, tak by stačilo prostě do $range přiřadit mínus.
Fisak
Profil
Norman:
To je docela blbá otázka čeho chci docílit :-)
Tori:
Dobře zkusím to.
Rellik
Profil
Fisak:
To je docela blbá otázka čeho chci docílit
Myslím, že zas až tak blbá otázka to není. Pokud chceš stahovat "rar" soubory, tak ti na to stačí obyčejný odkaz a ne nějaký šílený kód, který ti stejně nefunguje...
Fisak
Profil
Tori:
vypsalo mi to:
Warning: posix_getpwuid() has been disabled for security reasons in /home/users/insignia/insignia.funsite.cz/web/php_modules/download/index.php on line 7 UID @ Sun, 18 Nov 2012 20:45:00 +0100: Warning: chown(): Unable to find uid for ross in /home/users/insignia/insignia.funsite.cz/web/php_modules/download/index.php on line 15 Warning: posix_getpwuid() has been disabled for security reasons in /home/users/insignia/insignia.funsite.cz/web/php_modules/download/index.php on line 7 UID @ Sun, 18 Nov 2012 20:45:00 +0100: Warning: posix_getpwuid() has been disabled for security reasons in /home/users/insignia/insignia.funsite.cz/web/php_modules/download/index.php on line 7 UID @ Sun, 18 Nov 2012 20:45:00 +0100:
Kcko
Profil
Fisak:
Zkus toto http://www.webfaq.cz/clanek/Jak-nabidnout-soubor-ke-stazeni
Fisak
Profil
Kcko:
použil jsem jiný skript který funguje ale mockrát děkuji :-)

<?php

// place this code inside a php file and call it f.e. "download.php"
$path = $_SERVER['DOCUMENT_ROOT']."/path2file/"; // change the path to fit your websites document structure
$fullPath = $path.$_GET['download_file'];

if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
        case "pdf":
        header("Content-type: application/pdf"); // add here more headers for diff. extensions
        header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
        break;
        default;
        header("Content-type: application/octet-stream");
        header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    }
    header("Content-length: $fsize");
    header("Cache-control: private"); //use this to open files directly
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }
}
fclose ($fd);
exit;

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: