Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie pliku
Raven87
post 10.10.2008, 00:15:00
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
phpion
post 10.10.2008, 08:11:18
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
Raven87
post 10.10.2008, 23:47:00
Post #3





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

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


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?
Go to the top of the page
+Quote Post
Pilsener
post 13.10.2008, 09:07:34
Post #4





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

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 15:29