| Autor | Zpráva | ||
|---|---|---|---|
| Fisak Profil |
#1 · Zasláno: 18. 11. 2012, 13:07:51
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 |
#2 · Zasláno: 18. 11. 2012, 13:37:10
Fisak:
„Bohužel mi nějak nefachá.“ Jak konkrétně? Nevadí tam ta absolutní adresa ve filesystému (ř.44)? |
||
| Fisak Profil |
#3 · Zasláno: 18. 11. 2012, 13:41:23
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 |
#4 · Zasláno: 18. 11. 2012, 14:05:59
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 |
#5 · Zasláno: 18. 11. 2012, 14:33:39
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 |
#6 · Zasláno: 18. 11. 2012, 17:26:35
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 |
#8 · Zasláno: 18. 11. 2012, 20:30:43
Norman:
To je docela blbá otázka čeho chci docílit :-) Tori: Dobře zkusím to. |
||
| Rellik Profil |
#9 · Zasláno: 18. 11. 2012, 20:45:35
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 |
#10 · Zasláno: 18. 11. 2012, 20:45:44
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 |
#12 · Zasláno: 18. 11. 2012, 21:05:25
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; |
||
|
Časová prodleva: 13 let
|
|||
0