Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie pliku
Raven87
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.09.2008
Skąd: lublin

Ostrzeżenie: (0%)
-----


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....

Ten post edytował Raven87 10.10.2008, 00:15:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 23:44