Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyciąganiem jpg z bazy
Forum PHP.pl > Forum > PHP
ketman
Witam!

Wprawdzie tematów na temat uploadu jest już kilka to jednak nigdzie nie spotkałem rozwiązania mojego problemu. A wygląda on tak:

Muszę wrzucić obrazek do bazy. Potem go wyciągnąc i wyświetlić. NIby nic, prawda?
I wychodzi mi to do pewnego stopnia...

1. Upload - poszedł ok. W każdym wypadku się uploaduje.
2. Zapis do bazy - ok. Zawsze jest coś w polu BLOB w rozmiarze odpowiadającym plikowi wrzucanemu
3. Wyciąganie - i tu jest problem. Mam dwa pliki (linki poniżej). Jeden (ok.jpg) leci bez problemu natomiast co do drugiego to dostaję notorycznie błąd "Passed data is not in 'JPEG' format "


bezproblemowy

wkurzajacy
-- edit:
Proszę podać jakiś inny przykład. Niektórym taka fotka może się nie spodobać...
~crash


  1. <?php
  2.  
  3.     $plik = $_FILES['plik'];
  4.     header('Content-type: '.$plik['type']);
  5.     $fh = fopen($plik['tmp_name'], "rb");
  6.     $fh_u = addslashes(fread($fh, $plik['size']));
  7.  
  8.     $link = init(); //funkcja ustanawiajaca polaczenie do bazy
  9.     $query = "INSERT INTO wizytowki (plik) values ('$fh_u')";
  10.     mysql_query($query);
  11.     $id = mysql_insert_id();
  12.     $query = "SELECT plik FROM wizytowki WHERE OID = $id";
  13.     $res = mysql_query($query);
  14.     $line = mysql_fetch_array($res);
  15.     $ob = imagecreatefromstring($line['plik']);
  16.     imagejpeg($ob);
  17.     imagedestroy($ob);
  18.  
  19. ?>


Kod wstawiony powyżej jest streszczeniem tego co ma być, ale wystarczającym streszczeniem.

Czy ktoś zetknął się z tym problemem? Acha, porady o zapisywaniu pliku na serwerze się nie sprawdzą bo nie mam dostepu do zapisu przez php.
crash
Pokaż dokładnie jak wygląda ten błąd i gdzie się pojawia...
ketman
OK, już piszę dokładnie. Problem nie jest nawet w samym kodzie tylko w problem.jpg. O ile ok.jpg wrzuca się pięknie i pokazuje również to problem.jpg jestem w stanie uploadować, zapisać do bazy ale nie jestem w stanie zropbić z niego obrazu po tym wszystkim. Dostaję wspomniany komunikat, że 'nie jest to format jpeg'. Przypuszczam, że problemem jest coś zapisane w samym .jpg - czyli wszystkie informacje dodatkowe.
Po zapisie do bazy i odczycie stamtąd przestaje to być jpeg dla php.
Jeżeli wiesz które znaki mogą dawać taki efekt, bardzo prosze o odpowiedź. Poza zwykłym escapowaniem slash'y próbowałem kodować to jeszcze np. base64_encode (co miałoby niby uczynić zawartośc pliku spokojnie odczytywalną) ale nic to nie dało.

Zatem problemem jest problem.jpg a chciałem uzyskać informacje jak go przerobić, żeby był odczytywalny z bazy. Bez zapisu do MySQL nie mam z nim problemów.

php jest 5, MySQL też.

Żeby jeszcze dokładniej; error dostaję z imagecreatefromstring jeżeli string jest zawartością jpeg zapisaną w BLOB.

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

Problem został rozwiązany. Trochę przez przypadek.
Porada dla innych forumowiczów: 'Nie kombinujcie z kodowaniem tabel w MySQL. Zwykły latin2 zwykle wystarcza.' winksmiley.jpg
Dziekuję ~crashowi za poswięcony czas.
Kamson
Odpopie troszkę temat ale mam taki sam problem.

Zdjęcie po odczycie z bazy wywołuje błąd : Passed data is not in 'JPEG'

  1. <?php
  2. $SqlZdj=mysql_query("SELECT * FROM bis2_zdjecia WHERE subkategoria='".$RowSub['id']."'");
  3. while ($RowZdj = mysql_fetch_array($SqlZdj)){
  4.  
  5. $plik = imagecreatefromstring(base64_decode($RowZdj['plik']));
  6. $width = imagesx($plik);
  7. $height = imagesy($plik);
  8. ?>




co 6-7 plik wywołuje taki błąd. imagecreatefromstring wywoluje po to by wyciągnąć rozmiar zdjęcia dla JS'a który powiększa miniaturkę.
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.