Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Force Download w skrypce FileSupply
Forum PHP.pl > Forum > PHP
Hooch
Witam.
na mojej stronie używam skryptu FileSupply do pobrania stąd http://www.nokia51.22web.net/index.php?dir...upply+2_7_0.zip
Chciałbym aby po kliknięciu w link/nazwę pliku, plik ten zapisywał się na dysku a nie otwierał w przeglądarce.
To się chyba nazywa force download.
Nie wiem jak należy zmodyfikować kod tego skryptu aby działał tak jak napisałem wyżej.
Proszę o pomoc.
rzymek01
pomińmy to, że zależy to również od ustawień przeglądarki użytkownika, ja używałem taki kod:

  1. <?php
  2. @header('Pragma: public');
  3.    @header('Expires: 0');
  4.    @header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  5.    @header('Cache-Control: private', false);
  6.    @header('Content-Type: '.allow_file($rozszerzenie_pliku, 'application/force-download'));
  7.    @header('Content-Disposition: attachment; filename=xyz');
  8.    @header('Content-Transfer-Encoding: binary');
  9.    @header('Content-Length: jakas_liczba');  // wielkość pliku w bajtach
  10.    @header('Accept-Ranges: bytes');        // dlatego w bajtach ^^
  11.  
  12.    @readfile('nazwa_pliku_ktory_chcemy_wyslac');
  13.  
  14.    exit;
  15. ?>


gdzie zamiast fukcji allow_file możesz dać po prostu odpowiedni mime-type pliku; przykład tej funkcji:
  1. <?php
  2. function allow_file($ex, $mtype = false)
  3. {
  4.  $ex = strtolower($ex);
  5.  
  6.  if ($ex == 'zip')
  7.    $mtype = 'application/x-zip-compressed';
  8.  elseif ($ex == 'rar')
  9.    $mtype = 'application/x-rar-compressed';
  10.  elseif ($ex == 'tar')
  11.    $mtype = 'application/x-tar';
  12.  elseif ($ex == 'rpm')
  13.    $mtype = 'audio/x-pn-realaudio-plugin';
  14.  elseif ($ex == 'mp3' || $ex == 'mpeg' || $ex == 'mpg' || $ex == 'mpe')
  15.    $mtype = 'audio/mpeg';
  16.  elseif ($ex == 'wav')
  17.    $mtype = 'audio/x-wav';
  18.  elseif ($ex == 'avi')
  19.    $mtype = 'video/x-msvideo';
  20.  elseif ($ex == 'pdf')
  21.    $mtype = 'application/pdf';
  22.  elseif ($ex == 'doc')
  23.    $mtype = 'application/msword';
  24.  elseif ($ex == 'wri')
  25.    $mtype = 'application/mswrite';
  26.  elseif ($ex == 'rtf')
  27.    $mtype = 'application/rtf';
  28.  elseif ($ex == 'swf')
  29.    $mtype = 'application/x-shockwave-flash';
  30.  elseif ($ex == 'sql')
  31.    $mtype = 'application/force-download';
  32.  elseif ($ex == 'gz' || $ex == 'gzip')
  33.    $mtype = 'application/x-gzip';
  34.  elseif ($ex == 'ppt')
  35.    $mtype = 'application/vnd.ms-powerpoint';
  36.  elseif ($ex == 'asf' || $ex == 'asx')
  37.    $mtype = 'audio/x-ms-asf';
  38.  elseif ($ex == 'wax')
  39.    $mtype = 'audio/x-ms-wax';
  40.  elseif ($ex == 'wm')
  41.    $mtype = 'audio/x-ms-wm';
  42.  elseif ($ex == 'wma')
  43.    $mtype = 'audio/x-ms-wma';
  44.  elseif ($ex == 'wmv')
  45.    $mtype = 'audio/x-ms-wmv';
  46.  elseif ($ex == 'wvx')
  47.    $mtype = 'audio/x-ms-wvx';
  48.  elseif ($ex == 'mov' || $ex == 'qt')
  49.    $mtype = 'video/quicktime';
  50.  elseif ($ex == 'spl')
  51.    $mtype = 'application/futuresplash';
  52.  elseif (ereg('^(exe|com|bin|cgi|bat|pif|scr)$', $ex))
  53.    $mtype = 'application/octet-stream';
  54.  elseif (ereg('^xl(s|a|b|c|d|k|l|m|v|w)$', $ex))
  55.    $mtype = 'application/vnd.ms-excel';
  56.  
  57.  return($mtype);
  58. }
  59. ?>


Pozdrawiam!
Hooch
A gdzie mam ten kod wstawić do tego skryptu aby działało:
Tu jest wklejony skrypt FillSupply (Był za długi aby go wstawić na forum.)
http://tinypaste.com/4ea48
rzymek01
w lini 390 w pliku index.php tego skryptu co podałeś jest taki kod:
  1. <?php
  2. Header("Location: ".$_GET["dl"]."\n\n");
  3. ?>


zamien na:

  1. <?php
  2. header('Pragma: public');
  3.  header('Expires: 0');
  4.  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  5.  header('Cache-Control: private', false);
  6.  header('Content-Type: application/force-download');
  7.  header('Content-Disposition: attachment; filename='. substr($filename, strrpos($filename, '/') - strlen($filename) + 1));
  8.  header('Content-Transfer-Encoding: binary');
  9.  header('Content-Length: '.filesize($filename));
  10.  header('Accept-Ranges: bytes');
  11.  
  12.  @readfile($filename);
  13.  exit;
  14. ?>



sprawdzałem i styka biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.