Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie nowego pliku z danych w tabeli mysql
Forum PHP.pl > Forum > PHP
k-raku
Witam.

Otóż mam taki problem. Stworzyłem archiwum danych w mysql. Odpowiednie tablice przechowują nazwy, rozszerzenia, rozmiary oraz same pliki w formie blob'a w różnych formatach (pdf, jpg, tiff, txt). Dokładnie 1600 takich rekordów, pliki od 10KB do 1MB. Niesety pomimo iż skrypty które obsługują dodawanie plików do bazy danych działają bez zarzutu (brak błędów podczas dodawania) to podczas odczytywania danych z bazy potrafi wyrzuci komunikat że plik jest uszkodzony pomimo iż oryginał działa bez zarzutu.

Ogólnie, jak czas pokazał, rozwiązanie nietrafione. Tyle wstępu.

Czy jest możliwość napisać skrypt który będzie pobierał informacje z bazy danych tzn: nazwę pliku, rozszerzenie oraz zawartość blob'a i generował nowy plik w specjalnym katalogu? Wyciągnie wszystkie 1600 rekordów i utworzy 1600 plików z odpowiednimi nazwami oraz rozszerzeniami?

Czy ktoś ma jakiś pomysł jak do tego podejść bo średnio mi się widzi pobieranie i zapisywanie na dysku kolejno wszystkiego. dry.gif
d3ut3r
Możesz pokazać jak zapisałeś te dane w bazie ? (chodzi o kod php).

k-raku
tabela mysql przechowująca dane
  1. $sql = mysql_query("CREATE TABLE IF NOT EXISTS `dane` ( `id_p` int(4) NOT NULL AUTO_INCREMENT,
  2. `id_d` int(4) NOT NULL,
  3. `org_pdf` longblob NOT NULL,
  4. `org_typ` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  5. `org_size` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  6. PRIMARY KEY (`id_p`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci") OR DIE (.mysql_error());


insert danych do tabeli:

  1. if( is_uploaded_file( $_FILES['rys_org']['tmp_name'] ) )
  2. {
  3. $tmpName = $_FILES['rys_org']['tmp_name'];
  4. $fp = fopen($tmpName, 'r');
  5. $file = fread($fp, filesize($tmpName));
  6. $file_org = addslashes($file);
  7. $name_org = $_FILES['rys_org']['name'];
  8. $name_1 = explode(".",$name_org);
  9. $ile_1 = count($name_1);
  10. $ext_org = $name_1[$ile_1-1];
  11. $name_2 = array_slice ($name_1, 0, $ile_1-1);
  12. $name_org = implode(".", $name_2);
  13. $typ_org = $_FILES['rys_org']['type'];
  14. $size_org = $_FILES['rys_org']['size'];
  15.  
  16. $sql = mysql_query("INSERT INTO `dane` VALUES ('','$id_d','$file_org','$ext_org','$typ_org','$size_org')", $link)
  17. OR DIE (.mysql_error());
  18. }


mmmmmmm
3 błędy:
1 - za dużo pól w VALUES - 6 pól, a w tabeli jest 5
2 - pierwszy powinien być NULL, a nie '' (wartość pusta)
3 - or die(mysql_error())
k-raku
mmmmmmm
ad.1 - w tablicy jest 6 pól i 6 pakuje insert - bład przy kopiowaniu kodu
ad.2 - czy NULL czy ' ' - wszystko działa bez problemu - `id_p` int(4) NOT NULL AUTO_INCREMENT
ad.3 - przed kropką jest informacja które konkretnie zapytanie w jakim pliku się zrypało - wycięte bo to nie jest nikomu potrzebne

może zaczniemy jeszcze raz problem nie dotyczy insertu danych do tablicy bo to działa

problem dotyczy tworzenia nowych plików z rozszeżeniami pdf, txt, jpg z danych które już się znajdują w tablicy
d3ut3r
miałem taki sam problem, okazało się że to była wina addslashes, używaj mysql_real_escape_string lub PDO
k-raku
zmieniłem addslashes na mysql_real_escape_string i niestety w dalszym ciągu część dodawanych plików idzie ok inne corrupted

ogólnie idea trzymania plików w bazach mysql jest do kitu ale człowiek musiał przetestowac po swojemy by się przekonać i teraz mam problem

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.