Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie pliku
Forum PHP.pl > Forum > PHP
Raven87
na stronie index.php gdzie wyswietlają się pliki do pobrania w tabelce zrobilen do kazdego taki oto link

  1. <?php
  2. [url="download.php?id=$r%5Bid%5D"][img]dd3.gif[/img][/url]&#092;";
  3. ?>


gdzie $r = mysql_fetch_assoc($wynik))

id, scieżka (czyli $katalog/$plik_nazwa) i jakiś tam opis z formularza zapisuja mi sie w bazie mySQL
musze korzystać z id przy pobieraniu gdyż pliki (nie w bazie przechowywane tylko na servie) sa dodawane od usera z formularza. Wiec dodaje sie plik automatycznie dodaje sie dowy rekord z opisem i linkiem (sciezki nie wyswietlam)

linki wyświetlają mi jak widac jako obrazek, o adresie:

http://www.mojadomena.eu/download.php?id=1
http://www.mojadomena.eu/download.php?id=15
http://www.mojadomena.eu/download.php?id=42
wiec ok, dobrze mi czyta id kazdego pliku, dla kazdego inny i porpawny.
no i tutaj mam problem z plikiem download.php


  1. <?php
  2. $folder = &#092;"materialy/\";
  3. $plik =    
  4. $file = @fopen($folder.$plik, &#092;"r\");
  5. flock($file,2);
  6. $rozmiar = filesize($folder.$plik);
  7. $zawartosc = fread($file, filesize($folder.$plik));
  8. flock($file,3);
  9. fclose($file);
  10. header (&#092;"Content-Type application/octet-stream\");
  11. header (&#092;"Content-Lenght: $rozmiar;\");
  12. header (&#092;"Content-Disposition: attachment; filename=$plik\");
  13. echo $zawartosc;
  14. ?>

czyli skrypt do downloadu po klikniecu na linka, tylko nie mam pojęcia ( bo ten oto szablonik mialem juz gotowy) jak wykorzystac to przekazywane id. Innymi slowy jak zrobic by ten plik byl sciagany za pomoca download.php.


EDIT
wpadlem na pomysl bo zrobic cos takiego w tym skrypcie

  1. <?php
  2.  
  3.  $connection = @mysql_connect('xxxxx', 'xxxxxx', 'xxxxx')
  4.    or die('Brak polaczenia z serwerem MySQL');
  5.    $db = @mysql_select_db('xxxxxx', $connection)
  6.    or die('Nie moge polaczyc sie z baza danych');
  7.  
  8. $id = $_GET['id']; // czyli pobieranie id z linku z index.php
  9. $query = mysql_query("SELECT nazwa FROM test WHERE id='$id'");
  10. $result = mysql_query($query);
  11.  
  12.  
  13.  
  14. $folder = "materialy/";
  15. $plik = $result;
  16. $file = @fopen($folder.$plik, "r");
  17. flock($file,2);
  18. $rozmiar = filesize($folder.$plik);
  19. $zawartosc = fread($file, filesize($folder.$plik));
  20.  
  21. flock($file,3);
  22. fclose($file);
  23. header ("Content-Type application/octet-stream");
  24. header ("Content-Lenght: $rozmiar;");
  25. header ("Content-Disposition: attachment; filename=$plik");
  26. echo $zawartosc;
  27. ?>


wydaje sie to byc sensowne ale nie działa....
phpion
Spróbuj zmienić linijkę:
  1. <?php
  2. $result = mysql_query($query);
  3. ?>

na:
  1. <?php
  2. $result = mysql_result($query, 0);
  3. ?>

Oczywiście przydałoby się jeszcze sprawdzenie czy pod danym id jest zapisany w bazie rekord oraz czy sam plik fizycznie istnieje.
Raven87
dla tych dla których sprawdzam istnieją na bank więc to nie ich wina. Dalej niestety nie działa, nie mam zielonego pojęcia co jest nie tak z tym skryptem, wydaje mi się ze albo tworzenie linków
(chociaż dobrze je tworzy, w linku zawsze jest id dla każdego inne i właściwe)
albo odbieranie tego ID. Jakieś propozycje?
Pilsener
Kompletnie nie rozumiem tego kodu, choćby:
  1. <?php
  2. $query = mysql_query("SELECT nazwa FROM test WHERE id='$id'");
  3. $result = mysql_query($query);
  4. ?>
- dwa razy mysql_query?

Metodologia powinna być taka:
1. Sprawdzasz, czy zmienna ID jest poprawna i takie ID istnieje w bazie
2. Sprawdzasz, czy ścieżka do pliku jest poprawna - czy plik istnieje - file_exists
3. Otwierasz plik i wysyłasz do przeglądarki nie tak:
  1. <?php
  2. $file = @fopen($folder.$plik, "r");
  3. flock($file,2);
  4. $rozmiar = filesize($folder.$plik);
  5. $zawartosc = fread($file, filesize($folder.$plik));
  6. flock($file,3);
  7. fclose($file);
  8. ?>

tylko tak:
  1. <?php
  2. $down_rate = 1024*50;
  3. $file = fopen($sciezka, "r");
  4.      while(!feof($file))
  5.       {
  6.           echo fread($file,$down_rate);
  7.       }
  8.      fclose($file);
  9. ?>
- wysyłasz porcjami po 50kb, żeby oszczędzać zasoby.
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.