Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQLite][PHP]Pliki w bazie danych
Forum PHP.pl > Forum > Przedszkole
redelek
Witam,

Chciałbym dodawać pliki do bazy danych (wiem, że to nie tak się robi), ale na moje potrzeby to dobre rozwiązanie.
Wgrywam plik do bazy danych tak:
  1. $category=stripslashes( trim($_POST['fcategory']));
  2. $file=$_FILES['ffile'];
  3. $filename = $_FILES['ffile']['name'];
  4. $filenametmp = $_FILES['ffile']['tmp_name'];
  5. $filetype = $_FILES['ffile']['type'];
  6. $filesize = $_FILES['ffile']['size'];
  7. $mimetype = get_mime_type($filename);
  8. $db = new MyDB();
  9. if(!$db) {
  10. echo $db->lastErrorMsg();
  11. } else {
  12.  
  13. $queryadd=$db->query("INSERT INTO hdf (id, category, dateadd, mimetype, file, filesize, stat) VALUES (NULL, '$category', DATETIME('now','localtime'), '$mimetype', '$filename', '$filesize', '0')");
  14. if ($queryadd==FALSE) {
  15. echo "Error in fetch ".$db->lastErrorMsg();
  16. } else {
  17. echo "<strong>Record added successfully<br /></strong>";
  18.  
  19. }
  20. }
  21.  
  22. $db->close();


Plik dodaje się do bazy , jest jego pojemność pole file jest typu BLOB. Teraz pobieranie danych
  1. if(!$db) {
  2. echo $db->lastErrorMsg();
  3. } else {
  4. while ($row = $query->fetchArray(SQLITE3_ASSOC)) {
  5. //header("Content-Type:" . $row['mimetype']);
  6. echo $row['id']." ".$row['file']." <a download href=down.php?file=".$row['file']."&mime=".$row['mimetype']."> Download this file</a><br />";
  7. //echo "<a download href=\"file/{$row['file']}\">Download this file</a>";
  8. }
  9. }


plink down.php wygląda tak

  1. $file=stripslashes( trim($_GET['file']));
  2. $mime=stripslashes( trim($_GET['mime']));
  3.  
  4. header("Content-Type: " . $mime);
  5. header("Content-Disposition: attachment; filename=\"" . $file . "\"");
  6. readfile($file);


Problem w tym, że jak kliknę pobież to przeglądarka pobiera plik, ale nie jestem w stanie go otworzyć, bo dostaję informację, że plik jest uszkodzony. Jak go wgrywam ma 1,8M, jak pobieram ma 188B więc coś nie tak.
Czy mogę prosić o pomoc, może źle go pobieram, no już sam nie wiem i się zaplątałem
nospor
Zacznijmy od tego, ze ma chwile obecna do bazy nie wrzucasz zadnego pliku. Jedyne co teraz robisz to wrzucasz informacje o pliku a nie sam plik. Jestes pewien ze to wlasnie miales na mysli?
redelek
hmm chcę wrzucać pliki do bazy to na 100%. Jak zaglądam do pola BLOB to ma cyferki. Dlatego stwierdziłem że wrzuca pliki do bazy. A możesz podpowiedzieć dlaczego tą metodą nie wrzuca plików jakoś specjalnie trzeba plik wrzucić ?
nospor
$queryadd=$db->query("INSERT INTO hdf (id, category, dateadd, mimetype, file, filesize, stat) VALUES (NULL, '$category', DATETIME('now','localtime'), '$mimetype', '$filename', '$filesize', '0')");
Ktora czesc tego zapytania dodaje plik do bazy? Nie jego nazwe, nie jego wielkosc itp tylko jego zawartosc?
redelek
wydawało mi się że to właśnie filename ale faktycznie to tylko nazwa sad.gif
nospor
Dokladnie. FIlename to nazwa. zawartosc pliku znajduje sie w jego srodku. By pobrac jego srodek mozesz uzyc np. file_get_contents()
redelek
to zrobiłem poprawki,

  1. $category=stripslashes( trim($_POST['fcategory']));
  2. $filename = addslashes($_FILES['ffile']['name']);
  3. $filenametmp = addslashes($_FILES['ffile']['tmp_name']);
  4. $filecontents = file_get_contents($filenametmp);
  5. $filetype = $_FILES['ffile']['type'];
  6. $filesize = $_FILES['ffile']['size'];
  7.  
  8. $mimetype = get_mime_type($filename);
  9. //echo $filename."<br />";
  10. //echo $category."<br />";
  11. $db = new MyDB();
  12. if(!$db) {
  13. echo $db->lastErrorMsg();
  14. } else {
  15. $ff=$db->escapeString($filecontents);
  16. $queryadd=$db->query("INSERT INTO hdf (id, category, dateadd, mimetype, filecontents, filename, filesize, stat)
  17. VALUES (NULL, '$category', DATETIME('now','localtime'), '$mimetype', '$ff', '$filename', '$filesize', '0')");
  18. if ($queryadd==FALSE) {
  19. echo "Error in fetch ".$db->lastErrorMsg();
  20. } else {
  21. echo "<strong>Record added successfully<br /></strong>";
  22. //echo '<meta http-equiv="refresh" content="3;url=index.php" />';
  23. }
  24. }
  25. //echo $description;
  26. $db->close();

do pobierania plików mam plik down.php do którego jest przekazywane ID z bazy.
  1. include_once('inc/dbconfig.php');
  2. $id = stripslashes(trim($_GET['id']));
  3. echo $id;
  4. $db = new MyDB();
  5. $query = $db->query('SELECT * FROM hdf WHERE id='.$id.'');
  6.  
  7. if(!$db) {
  8. echo $db->lastErrorMsg();
  9. } else {
  10. while ($row = $query->fetchArray(SQLITE3_ASSOC)) {
  11. header("Content-Disposition: attachment; filename=" .$row['filename']);
  12. header("Content-Length: " .$row['filesize']);
  13. header("Content-Type: application/octet-stream;");
  14. readfile($rwo['filecontents']);
  15. }
  16. }
  17. //echo '';
  18. $db->close();

Ale nadal plik pobierają się uszkodzone sad.gif możesz jeszcze coś podpowiedzieć ?

dobra znalazłem w bazie podgląd tego co jest w blob i widać że nadal nie wgrywa zdjęć i plików pdf i txt sad.gif
walczę
leonpro778
Patrzyłeś?

http://php.net/manual/en/sqlite3.escapestring.php

I cytat: "To properly handle BLOB fields which may contain NUL characters, use SQLite3Stmt::bindParam() instead."
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.