Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie plików
Forum PHP.pl > Forum > Przedszkole
WebSter
Witam,

Jaki kod dać w nagłówkach header() pliku np. download.php, by można było pobierać pliki .exe, .zip, .rar po przez linki download.php?id=plik.exe (rar lub zip.) Zmieniałbym tylko końcówkę linku, na nazwę pliku który można pobrać.

Proszę o pomoc.
marlowe
  1. <?php
  2. header('Content-type: application/x-download');
  3. ?>

O to chodzi?
Ale przecież akurat linki do tych typów plików są chyba zawsze odczytywane jako aplikacji do pobrania...?
Pozdrawiam.
Bartek
WebSter
A gdzie w tym kodzie mam definicję jaki dać id do pliku czyli download.php?id=plik.rar?
marlowe
  1. <?php
  2. function getFileName($id)
  3. {
  4. if(!($fd = fopen(&#092;"pliki.txt\",\"r\"))){
  5.  return(&#092;"\");
  6. }
  7. while (!feof ($fd)){
  8.  $line = trim(fgets($fd));
  9.  if(($pos = strpos($line, &#092;" \")) === false)
  10. continue;
  11.  $str_id = substr($line, 0, $pos);
  12.  if($id == $str_id){
  13. return substr($line, $pos + 1, strlen($line));
  14.  }
  15. }
  16. return(&#092;"\");
  17. }
  18. function send($name)
  19. {
  20. if(!file_exists($name)){
  21.  echo('Nie ma takiego pliku na serwerze!');
  22.  return;
  23. }
  24.  
  25. if(($fileName = strrchr($name, &#092;"\")) == false){
  26.  echo('Nie ma takiego pliku na serwerze!');
  27.  return;
  28. }
  29. $fileName = substr($fileName, 1, strlen($fileName));
  30. $fd = fopen($name,&#092;"r\");
  31. $size = filesize($name);
  32. $contents = fread($fd, filesize($name));
  33.  
  34. fclose($fd);
  35.  
  36. header(&#092;"Content-Type: application/octet-stream\");
  37. header(&#092;"Content-Length: $size;\");
  38. header(&#092;"Content-Disposition: attachment; filename=$fileName\");
  39.  
  40. echo $contents;
  41. }
  42. if(isSet($_GET['id'])){
  43. $name = getFileName($_GET['id']);
  44. if($name == &#092;"\"){
  45.  echo('Nie ma takiego pliku na serwerze!');
  46. }
  47. else{
  48.  send($name);
  49. }
  50. }
  51. else{
  52. echo('Nie ma takiego pliku na serwerze!');
  53. }
  54. ?>

Musisz utworzyć plik pliki.txt o następującej budowie:
Kod
1.  ./sciezka/plik1.exe
2. plik2.rar
3. ./sciezka2/sciezka3/plik.zip
... etc.

Pozdrawiam.
Bartek
PS Forum zamieniło mi ! na &#33; - popraw to sobie.
Guest
Cytat
Warning: Wrong parameter count for fgets() in /home/httpd.poludnie/webster/inne/php/pobierz.php on line 8

etc...


"Nie ma takiego pliku na serwerze!"

Testowane na FoxServ.

pliki.txt
Cytat
1. p.rar


pobierz.php
  1. <?php
  2. function getFileName($id)
  3. {
  4. if(!($fd = fopen(&#092;"plik.txt\",\"r\"))){
  5.  return(&#092;"\");
  6. }
  7. while (!feof ($fd)){
  8.  $line = trim(fgets($fd));
  9.  if(($pos = strpos($line, &#092;" \")) === false)
  10. continue;
  11.  $str_id = substr($line, 0, $pos);
  12.  if($id == $str_id){
  13. return substr($line, $pos + 1, strlen($line));
  14.  }
  15. }
  16. return(&#092;"\");
  17. }
  18. function send($name)
  19. {
  20. if(!file_exists($name)){
  21.  echo('Nie ma takiego pliku na serwerze!');
  22.  return;
  23. }
  24.  
  25. if(($fileName = strrchr($name, &#092;"\")) == false){
  26.  echo('Nie ma takiego pliku na serwerze!');
  27.  return;
  28. }
  29. $fileName = substr($fileName, 1, strlen($fileName));
  30. $fd = fopen($name,&#092;"r\");
  31. $size = filesize($name);
  32. $contents = fread($fd, filesize($name));
  33. fclose($fd);
  34.  
  35. header(&#092;"Content-Type: application/octet-stream\");
  36. header(&#092;"Content-Length: $size;\");
  37. header(&#092;"Content-Disposition: attachment; filename=$fileName\");
  38.  
  39. echo $contents;
  40. }
  41. if(isSet($_GET['id'])){
  42. $name = getFileName($_GET['id']);
  43. if($name == &#092;"\"){
  44.  echo('Nie ma takiego pliku na serwerze!');
  45. }
  46. else{
  47.  send($name);
  48. }
  49. }
  50. else{
  51. echo('Nie ma takiego pliku na serwerze!');
  52. }
  53. ?>
  54. <HTML>
  55. <HEAD>
  56. <META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=iso-8859-2\">
  57. <TITLE>x-download</TITLE>
  58. </HEAD>
  59. <BODY>
  60.  
  61. <A HREF=\"pobierz.php?id=p.rar\">Pobierz</A>
  62.  
  63. </BODY>
  64. </HTML>


Czekam na dalszą pomoc.

-----
Kod php umieszczamy w [php] nie [quote]
hwao
fiflus
Cytat(WebSter @ 2004-07-18 22:00:01)
Witam,

Jaki kod dać w nagłówkach header() pliku np. download.php, by można było pobierać pliki .exe, .zip, .rar po przez linki download.php?id=plik.exe (rar lub zip.) Zmieniałbym tylko końcówkę linku, na nazwę pliku który można pobrać.

Proszę o pomoc.

link: download.php?id=plik.exe

download.php :

  1. <?php
  2. $a = $_GET['id'];
  3. header (&#092;"Location: katalog_z_plikami/$a\");
  4. ?>


O to chodziło?
WebSter~
Nie działa powyższy kod, tj. po kliknięciu na link przekierowuje do katalogu z plikiem, a nie wywołuje go sad.gif.

Jeszcze jakieś pomysły?
WebSter | IP: 177.97.185.3
Macie jeszcze jakieś pomysły? To bardzo ważne...
Gość_WebSter
[quote=Guest,2004-07-20 16:15:44] [quote]

Warning: Wrong parameter count for fgets() in /home/httpd.poludnie/webster/inne/php/pobierz.php on line 8

etc...[/quote]

"Nie ma takiego pliku na serwerze!"

Testowane na FoxServ.

pliki.txt[quote]
1. p.rar[/quote]

pobierz.php
  1. <?php
  2. function getFileName($id)
  3. {
  4.   if(!($fd = fopen(&#092;"plik.txt\",\"r\"))){
  5.          return(&#092;"\");
  6.   }
  7.   while (!feof ($fd)){
  8.          $line = trim(fgets($fd));
  9.          if(($pos = strpos($line, &#092;" \")) === false)
  10.                 continue;
  11.          $str_id = substr($line, 0, $pos);
  12.          if($id == $str_id){
  13.                 return substr($line, $pos + 1, strlen($line));
  14.          }
  15.   }
  16.   return(&#092;"\");
  17. }
  18. function send($name)
  19. {
  20.   if(!file_exists($name)){
  21.          echo('Nie ma takiego pliku na serwerze!');
  22.          return;
  23.   }
  24.  
  25.   if(($fileName = strrchr($name, &#092;"\")) == false){
  26.          echo('Nie ma takiego pliku na serwerze!');
  27.          return;
  28.   }
  29.   $fileName = substr($fileName, 1, strlen($fileName));
  30.   $fd = fopen($name,&#092;"r\");
  31.   $size = filesize($name);
  32.   $contents = fread($fd, filesize($name));
  33.   fclose($fd);
  34.  
  35.   header(&#092;"Content-Type: application/octet-stream\");
  36.   header(&#092;"Content-Length: $size;\");
  37.   header(&#092;"Content-Disposition: attachment; filename=$fileName\");
  38.  
  39.   echo $contents;
  40. }
  41. if(isSet($_GET['id'])){
  42.   $name = getFileName($_GET['id']);
  43.   if($name == &#092;"\"){
  44.          echo('Nie ma takiego pliku na serwerze!');
  45.   }
  46.   else{
  47.          send($name);
  48.   }
  49. }
  50. else{
  51.   echo('Nie ma takiego pliku na serwerze!');
  52. }
  53. ?>
  54. <HTML>
  55. <HEAD>
  56. <META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=iso-8859-2\">
  57. <TITLE>x-download</TITLE>
  58. </HEAD>
  59. <BODY>
  60.  
  61. <A HREF=\"pobierz.php?id=p.rar\">Pobierz</A>
  62.  
  63. </BODY>
  64. </HTML>


Czekam na dalszą pomoc.

-----
Kod php umieszczamy w [php] nie [quote]
hwao
[/quote]
Moze w tym kodzie cos zle robie?
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.