Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlenie plików z longblob jako linki do pobrania
Forum PHP.pl > Forum > Przedszkole
8_pasarzer_NOSTROMO
Witam
Panowie problem taki jest. Mam baze danych gdzie mam wrzucane pliki (jpg,pdf,doc,xls,odt,bmp itp.) Następnie pobieram wszystko i chciałbym zrobić z każdego pliku link do pobrania tego pliku.

Plik np. index.php
  1. include "../../baza.php";
  2. $zapytanie = "SELECT id,typ,plik FROM zalaczniki order by data";
  3. $wykonaj = mysql_query($zapytanie) or die ("Błąd 1");
  4. while($wiersz = mysql_fetch_array($wykonaj))
  5. {$id[]=$wiersz['id'];
  6. $typ[]=$wiersz['typ'];
  7. $plik[]=$wiersz['plik'];};
  8. $ile=count($id);
  9.  
  10. for($x=0;$x<$ile;$x++)
  11. {
  12. echo $id;
  13. if ($typ[$x]!='')
  14. {print"<img src='../../images/pdfm.png' width='16' height='16' border='0' alt='Załącznik' onclick=\"window.open('pokaz_plik_swi.php?id=$id[$x]','okienko','menubar=no,width=200,height=200')\" style='cursor: pointer;'>&nbsp;&nbsp;&nbsp;&nbsp;";}else{echo"brak załącznika";}
  15. }



Natomiast gdy załącznik jest, robię odnośnik do pliku pokaz_plik_swi.php

pokaz_plik_swi.php
  1. <?php session_start();
  2. include 'upra.php';
  3.  
  4. $_id = $_GET['id'];
  5.  
  6. include "../../baza.php";
  7. $zapytanie = "SELECT typ,plik FROM zalaczniki where id='$_id'";
  8. $wykonaj = mysql_query($zapytanie) or die ("pyt plik błędne ");
  9. while($wiersz = mysql_fetch_array($wykonaj))
  10. {$tresc=$wiersz['plik'];
  11. $typ=$wiersz['typ'];};
  12. mysql_close($link);
  13.  
  14. if ($typ=='application/pdf')
  15. {
  16. header("Content-type: application/pdf");
  17. header("Content-lenght:".strlen($tresc));
  18. print $tresc;
  19. }
  20. elseif ($typ=='image/jpeg' || $typ=='image/bmp')
  21. {
  22. header("Content-type: image/jpeg");
  23. header("Content-lenght:".strlen($tresc));
  24. print $tresc;
  25. };


pdf, jpg działa, lecz nie działa mi doc, xls i te z edytorów pisania.

Wolałbym opcję taką aby już w pliku index.php klikając w link wyskoczyła opcja ZAPISZ PLIK JAKO
john_doe
a nie możesz po prostu w pętli gdzie wyświetlasz rekordy dać

  1. echo '<a href="' . $wiersz['plik'] . '">pobierz</a>';


takie coś powinno zadziałać...
8_pasarzer_NOSTROMO
  1. include "../../baza.php";
  2. $zapytanie = "SELECT id,typ,plik FROM zalaczniki order by data";
  3. $wykonaj = mysql_query($zapytanie) or die ("Błąd 1");
  4. while($wiersz = mysql_fetch_array($wykonaj))
  5. {$id[]=$wiersz['id'];
  6. $typ[]=$wiersz['typ'];
  7. $plik[]=$wiersz['plik'];};
  8. $ile=count($id);
  9.  
  10. for($x=0;$x<$ile;$x++)
  11. {
  12. echo $id;
  13. if ($typ[$x]!='')
  14. {echo '<a href="' . $wiersz['plik'] . '">pobierz</a>';}else{echo"brak załącznika";}
  15. }


Nie działa. Jak najade myszką na pobierz (mam podany adres pliku index.php tj. dla mojego przykładu http://10.2.80.3/xxxxx/yyyyyy/zzzzzzz/). Pliki w zmiennej plik[] są pobierane z pola longblob
john_doe
a teraz doczytałem dokładnie longblob.
musisz trzymać dane binarne?
nie lepiej zrobić upload pliku i w bazie zapisywać nazwę pliku i przy downloadzie zwracać tą nazwę + path
8_pasarzer_NOSTROMO
No dla mnie najlepiej jest trzymać dane w bazach bo nie jestem adminem i nie mogę wrzucać wszystkiego na serwer. A w tworzeniu baz mam dowolność.
Jeśli to mega trudne to odpuszczę.
chciałbym tworzyć właśnie linki do plików, pobranych z longbloba.
Gdzie szukać pomocy, nie wiem od czego zacząć
8_pasazer_NOSTROMO
Pomocy, linki do plików zapisanych w bazie danych (LONGBLOB)

Nie mogę wysyłać plików na serwer bo admin zablokował taką możliwość.
john_doe
Nie wierze ze upload masz zablokowany
Zrób zwykły upload pliku i zapisz do bazy nazwę pliku
d3ut3r
nie możesz wygenerować linku do pliku który nie istnieje, co najwyżej możesz zrobić link typu:

http://domena.com/download.php?id=10

gdzie id=10 to id rekordu w bazie danych, a w pliku download.php musisz:

1. pobrać zawartość i typ pliku z bazy danych
2. ustawić odpowiednie nagłówki za pomocą header
3. za pomocą echowyświetlić zawartość pliku

Tutaj masz tutorial http://onlamp.com/pub/a/php/2000/09/15/php_mysql.html?page=3 tutorial co prawda ma trochę lat ale zasada się nie zmieniła smile.gif
8_pasazer_NOSTROMO
@ d3ut3r
A gdzie znajde informację jaki nagłówek trzeba wypalić dla plików doc,docx,xls,odt ?
W Twojej metodzie poradziałem sobie z pdf i jpg. Nie wiem jakie nagłówki wypalać na te wszystkie tekstowe pliki.
d3ut3r
Dla PHP > 5.3 można skorzystać z Finfo:

  1. $fileInfo=new \Finfo();
  2. var_dump($fileInfo->file('test.docx',FILEINFO_MIME_TYPE));
8_pasazer_NOSTROMO
Cytat(d3ut3r @ 8.12.2012, 10:10:15 ) *
1. pobrać zawartość i typ pliku z bazy danych
2. ustawić odpowiednie nagłówki za pomocą header
3. za pomocą echowyświetlić zawartość pliku



Zrobiłem właśnie tak, lecz mam problem z IE6.0, jedynie tam wyskakuje błąd. Pozostałe przegladarki zadają pytanie czy pobrać czy uruchomić plik. IE 6.0 błąd! dlaczego ?
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.