Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php+mysql+blob] załączniki w polu blob
hettmix
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Witam.

Walczę z pewnym tematem i już brakuje mi pomysłów. Może mnie ktoś naprowadzi.
Posiadam w bazie tabelę, w której przechowuję załączniki (pliki różnego formatu) dodawane przez użytkowników.
Skrypt odpowiedzialny za upload plików do bazy wygląda tak:
  1. <?php
  2. require "/volume1/web/Joomla_1.5/connection/connection.php";
  3. connection();
  4.  
  5. if(isset($_POST['znajdz']) && $_FILES['plik_zalacznika']['size'] > 0)
  6. {
  7.  
  8. $fileName = $_FILES['plik_zalacznika']['name'];
  9. $tmpName = $_FILES['plik_zalacznika']['tmp_name'];
  10. $fileSize = $_FILES['plik_zalacznika']['size'];
  11. $fileType = $_FILES['plik_zalacznika']['type'];
  12.  
  13. $fp = fopen($tmpName, 'r');
  14. $content = fread($fp, filesize($tmpName));
  15. $content = addslashes($content);
  16. fclose($fp);
  17.  
  18. {
  19. $fileName = addslashes($fileName);
  20. }
  21.  
  22. $query = "INSERT INTO tbl_zalaczniki_sprawy_porz (zalaczniki_nazwa_pliku, zalaczniki_rozmiar_pliku, zalaczniki_typ_pliku, zalaczniki_plik ) ".
  23. "VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
  24.  
  25. mysql_query($query) or die('Error, query failed');
  26.  
  27.  
  28. echo "<br>File $fileName uploaded<br>";
  29. }
  30. ?>

Pliki zapisywane są w polu typu blob (jest to świadomy wybór), a cały skrypt działa prawidłowo bez żadnych problemów.
Schody zaczynają się podczas pobierania plików z bazy.
Skrypt odpowiedzialny za to wygląda tak:
  1. <?php
  2. require "/volume1/web/Joomla_1.5/connection/connection.php";
  3. connection();
  4.  
  5. if(isset($_GET['id']))
  6. {
  7.  
  8. $id = trim($_GET['id']);
  9.  
  10.  
  11. $query = "SELECT zalaczniki_nazwa_pliku, zalaczniki_typ_pliku, zalaczniki_rozmiar_pliku, zalaczniki_plik " .
  12. "FROM tbl_zalaczniki_sprawy_porz WHERE id = '$id'";
  13.  
  14. $result = mysql_query($query) or die('Error, query failed');
  15. list($name, $type, $size, $content) = mysql_fetch_array($result);
  16.  
  17.  
  18. header("Content-length: $size");
  19. header("Content-type: $type");
  20. header("Content-Disposition: attachment; filename=$name");
  21. print $content;
  22.  
  23. }
  24.  
  25. ?>

Mianowicie, mogę pobrać pliki z bazy i zapisać je na dysku lecz części z nich nie mogę otworzyć mimo, że mają taki sam rozmiar jak oryginały. Bez problemu otwierają się pliki *.pdf, ale już np. *.png lub *.jpg lub *.xls są błędne. Sam zapis do bazy jest prawidłowy, bo gdy pobieram zapisane w bazie pliki za pośrednictwem phpMyAdmin na dysk, to mogę je wszystkie później otworzyć bez żadnego problemu. Kombinuję już na różne sposoby i nie wiem co jest tego przyczyną.
Czy wpływ na to może mieć konfiguracja serwera (jest to serwerek Synology DS712+) np. ustawienia dotyczące mime type ?.
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: 19.09.2025 - 21:39