Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQLite][PHP]Pliki w bazie danych
redelek
post 13.12.2018, 10:12:55
Post #1





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


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


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
nospor
post 13.12.2018, 10:23:58
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
redelek
post 13.12.2018, 13:25:30
Post #3





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


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ć ?


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
nospor
post 13.12.2018, 14:56:56
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




$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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
redelek
post 13.12.2018, 15:13:59
Post #5





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


wydawało mi się że to właśnie filename ale faktycznie to tylko nazwa sad.gif


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
nospor
post 13.12.2018, 15:14:51
Post #6





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Dokladnie. FIlename to nazwa. zawartosc pliku znajduje sie w jego srodku. By pobrac jego srodek mozesz uzyc np. file_get_contents()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
redelek
post 14.12.2018, 22:53:39
Post #7





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


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ę


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
leonpro778
post 17.12.2018, 12:13:21
Post #8





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

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


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."
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.03.2024 - 13:56