Autor Zpráva
ONdra28
Profil *
Zdravím,

potřebuju omezit rychlost stahování pro neregistrované uživatele blabla....

Vyguglil sem tenhle skript:
<?php
// local file that should be send to the client
$local_file = 'Omen.mp3';
// filename that the user gets as default
$download_file = 'Omen.mp3';
 
// set the download rate limit (=> 20,5 kb/s)
$download_rate = 20.5; 
if(file_exists($local_file) && is_file($local_file)) {
    // send headers
    header('Cache-control: private');
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: '.filesize($local_file));
    header('Content-Disposition: filename='.$download_file);
 
    // flush content
    flush();    
    // open file stream
    $file = fopen($local_file, "r");    
    while(!feof($file)) {
 
        // send the current file part to the browser
        print fread($file, round($download_rate * 1024));    
 
        // flush the content to the browser
        flush();
 
        // sleep one second
        sleep(1);    
    }    
 
    // close file stream
    fclose($file);}
else {
    die('Error: The file '.$local_file.' does not exist!');
}
?>


No když ho spustím tak "execution" čas je strašně dlouhej...minutu než se to pohlo a soubor stáhlo a stejně potom nešel otevřít..program hlásil, že je poškozený,

Jak řešíte omezení rychlosti Vy ?

Díky za odpovědi...
Joker
Profil
ONdra28:
minutu než se to pohlo a soubor stáhlo a stejně potom nešel otevřít
Zkontroloval bych velikost toho souboru a jestli je podezřele malý, zkusil bych ho otevřít v textovém editoru.
Tipuju, že v něm bude ve skutečnosti napsaná nějaká chybová hláška.
MCKAY
Profil
Mě to funguje v pohodě, problém bude u tebe, a asi nejspíš jak říká Joker, v tom souboru.
ONdra28
Profil *
Nevím teda jestli je to formátem...ale když to použiji na nějakou mp3 tak trvá strašně dlouho
Jan Tvrdík
Profil
ONdra28:
Zkus se podívat, jak se to řeší tady, třeba ti to pomůže.
ONdra28
Profil *
No ona bude zrada možná v hostingu....
AM_
Profil
1) zřejmě překračuješ maximální dobu skriptu (řeší se set_time_limit(0) ale hosting to může mít zakázané)
2) mám pocit že na windows serverech jsou potíže s flush()ováním zásobníku, ale server je předpokládám linux takže tím to asi není
MCKAY
Profil
AM_
Já mám server s windowsem a běhá to v pohodě. Spíš bych řekl že to bude tou dobou běhu skriptu, nebo chybou souboru.
Joker
Profil
ONdra28:
No ona bude zrada možná v hostingu....
Právě proto říkám: Editovat ten stažený soubor (pokud má rozumnou velikost... jestli má třeba 5MB, může se s ním editor trochu zapotit). Nejspíš v něm bude na konci napsaná nějaká chybová hláška.

To se stává.
Prohlížeč si řekne o soubor, PHP chce načíst ten soubor a vypsat ho prohlížeči. Jenže nastane chyba, takže PHP místo toho vyhodí chybovou hlášku. Ta přijde prohlížeči, který si ale myslí, že to jsou ta data na která čeká a uloží to do toho souboru. Vznikne soubor třeba .mp3, ve kterém je ale ve skutečnosti uložená ta chybová hláška.
ONdra28
Profil *
Tak skript už stahuje....akorát že každý soubor co stáhne tak je nějak poškozen...když stahnu mp3 soubor tak v něm tak divně hvízdá...pokud zip,rar tak neočekávaný konec archivu...zajímavé je, že když ten soubor stáhnu normálně bez skriptu tak v něm chyba není....tož WTF
Jan Tvrdík
Profil
ONdra28:
Stáhni si nějaký program, který umí porovnávat soubory (diff) a porovnej poškozený a správný soubor.
ONdra28
Profil *
HH tak ste měli jako vždy pravdu...stáhnutej soubor sem si otevřel v PSpadu a tam ty chybový hlášky...ve skriptu nejdřív nedefinovaná proměnná, pak set_time_limit na hostingu neni povolenej...no chybky sem odstranil a už to šlape jak má ale přece to má problém...nestahuje to tou "omezenou" rychlostí jakou má :D
Jan Tvrdík
Profil
ONdra28:
Pak tě můžu jen znova odkázat tam, kam jsem tě už jednou odkázal – http://nettephp.com/cs/extras/file-downloader#toc-omezovac-rychlosti
karbon
Profil *
Stáhni si nějaký program, který umí porovnávat soubory
Příkaz COMP v příkazové řádce nestačí?
AM_
Profil
možná by chtělo poupravit ten while cyklus:
    while(!feof($file)) {
        $time = time();
        // send the current file part to the browser
        print fread($file, round($download_rate * 1024));    
 
        // flush the content to the browser
        flush();
 
        // sleep one second
        while ($time == time()) {} ;
    }   

jinak při $download_rate == 20.5 to nebude stahovat 20kb/s, ale 20KB/s :) (kb = 1000 bit, KB = 1024 byte = 8192 bit)

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: