Autor | Zpráva | ||
---|---|---|---|
ONdra28 Profil * |
#1 · Zasláno: 7. 8. 2009, 14:26:45
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 |
#2 · Zasláno: 7. 8. 2009, 14:39:37
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 |
#3 · Zasláno: 7. 8. 2009, 14:59:08
Mě to funguje v pohodě, problém bude u tebe, a asi nejspíš jak říká Joker, v tom souboru.
|
||
ONdra28 Profil * |
#4 · Zasláno: 7. 8. 2009, 15:21:33
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 |
#5 · Zasláno: 7. 8. 2009, 15:24:52
ONdra28:
Zkus se podívat, jak se to řeší tady, třeba ti to pomůže. |
||
ONdra28 Profil * |
#6 · Zasláno: 7. 8. 2009, 15:32:18
No ona bude zrada možná v hostingu....
|
||
AM_ Profil |
#7 · Zasláno: 7. 8. 2009, 15:46:25
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 |
#8 · Zasláno: 7. 8. 2009, 16:09:19
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 |
#9 · Zasláno: 7. 8. 2009, 16:26:52 · Upravil/a: Joker
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 * |
#10 · Zasláno: 7. 8. 2009, 19:06:34
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 |
#11 · Zasláno: 7. 8. 2009, 19:33:18
ONdra28:
Stáhni si nějaký program, který umí porovnávat soubory (diff) a porovnej poškozený a správný soubor. |
||
ONdra28 Profil * |
#12 · Zasláno: 7. 8. 2009, 20:44:06
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 |
#13 · Zasláno: 7. 8. 2009, 22:07:50
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 * |
#14 · Zasláno: 9. 8. 2009, 13:43:57
„Stáhni si nějaký program, který umí porovnávat soubory“
Příkaz COMP v příkazové řádce nestačí? |
||
AM_ Profil |
#15 · Zasláno: 9. 8. 2009, 13:53:36
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) |
||
Časová prodleva: 15 let
|
0