Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] Pobieranie plików z bazy.
Mefiuu
post 15.02.2011, 22:32:38
Post #1





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

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


Witam. Piszę skrypt pobierania plików wrzuconych na serwer. Ogólnie to za pomocą formularza podajemy dane (opis i takie informacje) i wrzucamy plik ($_FILES) a później możemy go pobrać. Wszystko działało na parę pierwszych plików, później przestało i wypisuje mi się tylko nazwa pliku pobrana z bazy. Otóż skrypt pobierający tak wygląda:

  1. if(isset($_GET['file']) && $_GET['file']==$id) {
  2. $id = $_GET['file'];
  3. $name = mysql_query("SELECT name FROM download WHERE id='$id'");
  4. $name = mysql_result($name, 0, 0);
  5.  
  6. $rozszerzenie = mysql_query("SELECT rozszerzenie FROM download WHERE id='$id'");
  7. $rozszerzenie = mysql_result($rozszerzenie, 0, 0);
  8.  
  9. header('Content-Type: $rozszerzenie');
  10.  
  11. header('Content-Disposition: attachment; filename="$name"');
  12.  
  13. echo($name);
  14.  
  15. $ile_pobrano = mysql_query("UPDATE download SET pobrano=pobrano+1 WHERE id='$id'");
  16.  
  17.  
  18. }



Domyślam się że to coś z nagłówkami pewnie, ale nie mogę dojść do tego co może być powodem. Za porady dziękuję.
Go to the top of the page
+Quote Post
osl
post 15.02.2011, 23:03:15
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


a co innego ma się wypisywać, skoro robisz
Kod
echo($name);

musisz pobrać zawartość pliku i ją wysłać do przeglądarki... póki co wysyłasz samą nazwę pliku.
Go to the top of the page
+Quote Post
Mefiuu
post 15.02.2011, 23:05:26
Post #3





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

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


no tak, ale jakiej funkcji użyć? Próbowałem readfile ale nie wyszło również. A z echo na początku działało i pobierało.
Go to the top of the page
+Quote Post
osl
post 15.02.2011, 23:11:35
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


chociażby fread.

Ogólnie, możesz to zdebugować w dość prosty sposób:
1. załaduj sobie plik tekstowy z jakimś lorem ipsum
2. zakomentuj wszelkie headery
3. pobierz dane do pliku z bazy i wyświetl je w przeglądarce.
4. jeśli widzisz w przeglądarce to co powinieneś - dopiero zabierz się za headery. Będzie łatwiej.

I jeszcze jedno - jeśli pole "rozszerzenie" jest tym, na co wskazywała by nazwa, to raczej też jest błąd.
Poza tym wszystkim, dlaczego nie zrobisz wszystkiego w jednym zapytaniu do bazy?
Go to the top of the page
+Quote Post
Mefiuu
post 16.02.2011, 22:04:07
Post #5





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

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


użyłem fread ale nadal nic. Sprawdziłem i pliki przecież trzymam w katalogu 'files', więc dodałem :

  1. header('Content-Type: $rozszerzenie');
  2.  
  3. header('Content-Disposition: attachment; filename="/files/$name"');
  4.  
  5. readfile($name);


no ale niestety dalej nic, nie pobiera mi. Zastanawia mnie jednak, dlaczego przez chwilę wczoraj pobierało i nagle przestało ?
Rozszerzenie wskazuje jaki jest typ pliku, np. 'application/pdf'. Jest ok, ten skrypt służy celom edukacyjnym.

Dane z bazy, niedopatrzenie, już poprawione.

Ale zastanawia mnie dalej, dlaczego nie działa jak powinno ?
Go to the top of the page
+Quote Post
osl
post 16.02.2011, 22:20:13
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


w headerze "filename" to nie ścieżka do pliku, tylko nazwa pod jaką plik będzie wysłany do przeglądarki.
musisz pobrać zawartość pliku jakąkolwiek funkcją, chociażby fread czy readfile i wyświetlić ją/wysłać do przeglądarki.
Upewnij się, że ścieżka do wywołania funkcji czytającej plik jest prawidłowa.

Ten post edytował osl 16.02.2011, 22:20:43
Go to the top of the page
+Quote Post
Mefiuu
post 17.02.2011, 22:53:17
Post #7





Grupa: Zarejestrowani
Postów: 371
Pomógł: 18
Dołączył: 23.11.2008

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


  1. $name = '../pobierz/files/'.$name;
  2. $uchwyt = fopen($name, "r");
  3. $tresc = fread($uchwyt, filesize($name));
  4. fclose($uchwyt);
  5.  
  6. header('Content-Type: $rozszerzenie');
  7.  
  8. header('Content-Disposition: attachment; filename="$name"');
  9.  


No i tak, $name trzyma ścieżkę do pliku, $uchwyt otwiera, $tresc czyta, a później próbuję wyświetlić i dalej nic. Normalnie już nie mam pojęcia totalnie co jest nie tak.


edit :


nie wiem, kombinuje już jak bury koń -.- przerobiłem po raz n-ty kod i wygląda tak :

  1. <?php
  2.  
  3. $id = $_GET['file'];
  4.  
  5. $select = mysql_query("SELECT name, rozszerzenie FROM download WHERE id='$id'");
  6. $select = mysql_fetch_assoc($select);
  7.  
  8. $typ = $select['rozszerzenie'];
  9. $name = $select['name'];
  10.  
  11.  
  12. if(isset($_GET['file']) && $_GET['file']==$id) {
  13.  
  14. $fd = fopen("../pobierz/files/$name","r");
  15. $size = filesize("../pobierz/files/$name");
  16. $contents = fread($fd, filesize("../pobierz/files/$name"));
  17.  
  18. fclose($fd);
  19.  
  20. header("Content-Type: application/octet-stream");
  21. header("Content-Length: $size;");
  22. header("Content-Disposition: attachment; filename=$fileName");
  23.  
  24.  
  25. echo($name);
  26.  
  27. }
  28.  
  29.  
  30. ?>


trochę ściągnąłem z internetu, trochę sam dopisałem bo już nie wiem w czym tkwi błąd. Po kliknięciu na jakikolwiek plik, ściąga mi jakiś plik z rozszerzeniem .php a tam błędy typu :

Kod
<br />
<b>Warning</b>:  mysql_query() [<a href='function.mysql-query'>function.mysql-query</a>]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in <b>...</b> on line <b>5</b><br />
<br />
<b>Warning</b>:  mysql_query() [<a href='function.mysql-query'>function.mysql-query</a>]: A link to the server could not be established in <b>...</b> on line <b>5</b><br />
<br />
<b>Warning</b>:  mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in <b>...</b> on line <b>6</b><br />


Nie wiem, może to być wina bazy danych? Bo jak ustawię sobie obojętne jakie dane bez użycia bazy danych, po prostu nazwa i rozszerzenie w zmiennych to ładnie to pobiera. A jak dodam ściąganie danych z bazy danych to już się sypie. Ale o dziwo logowanie, dodawanie plików działa z bazą bez problemu. Bardzo proszę o pomoc, bo męczę się z tym i męczę i nic mi do głowy sensownego nie przychodzi...

Ten post edytował Mefiuu 17.02.2011, 22:54:02
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: 24.04.2025 - 04:24