![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cześć, mam wtyczkę w PHP, która działa dobrze na serwerze Apache, część kodu odpowiedzialna za wykrywanie rozszerzenia zdalnego obrazka:
jednak problem pojawia się, gdy użyje jej na serwerze nginx, a dokładnie gdy obrazek nie ma rozszerzenia JPG tylko PNG, to skrypt nie wykonuje się dalej, a w logach wysypuje błędem: Kod ErrorException: Fatal Error: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: starts with 0x89 0x50 - library/Andy/ConvertImage/DataWriter.php:216 W php.ini mam wyłączyłem pokazywanie błędów (display_errors Off), jednak to nic nie dało, czy jest jakiś sposób, aby skrypt się wykonywał dalej? Dokładna linijka odpowiedzialna za błąd to: Kod $im = @imagecreatefromjpeg($tempFullPath); tak jakby małpa nie wyłączała błędów na nginxie... (IMG:style_emoticons/default/sad.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 623 Pomógł: 144 Dołączył: 22.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ale wiesz że apache i nginx się mają nijak do samego php? One są tylko pośrednikami, nic więcej. Kwestia błędów to mogą być opcje w samym php.
A co do błędu, to polecam jego naprawę a nie ukrywanie (IMG:style_emoticons/default/smile.gif) Swoją drogą, czy na pewno ten plik który przetwarzasz to jest jpeg? |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Swoją drogą, czy na pewno ten plik który przetwarzasz to jest jpeg? @ohm a teraz wez jeszcze raz na spokojnie przeczytaj tresc pytania, tym razem ze zrozumieniem (IMG:style_emoticons/default/wink.gif) Analiza kodu rowniez moze ci pomoc (IMG:style_emoticons/default/wink.gif) @warder z jakies powodu ty tam masz rzucony wyjatek. imagecreatefromjpeg() nie rzuca wyjatkiem wiec ten wyjatek musi byc rzucany przez framework, ktorego uzywasz. Tak mi sie zdaje. sprobuj objac to blokiem TRY CATCH moze pomoze. @ gasi bledy w standardowej obsludze bledow. Gdy bledy przechodza przez rozne frameworki to juz to nie bedzie dzialac. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Zajrzałem do dokumentacji biblioteki gd i okazało się, że w runtime configuration jest tylko jedno ustawienie, które można kontrolować:
Kod gd.jpeg_ignore_warning Od php7.1 jest domyślnie ustawione na 1, ale wcześniej było 0. Może masz różne wersje php na różnych serwerach? Albo różne ustawienia w ini? To ustawienie nazywa się wprawdzie "warning" ale może dotyczy też errorów. Musisz sprawdzić. Spróbuj do php.ini dodać Kod gd.jpeg_ignore_warning=1 albo gdzieś w kodzie dodać Kod ini_set('gd.jpeg_ignore_warning', 1); Ale ja bym zrobił tak jak @nospor napisał - przechwycił ten wyjątek, bo po to wyjątki są. A najlepiej byłoby zapobiec powstawaniu tego błędu, czyli uzależnić wykonanie wierszy 16-20 od wyniku sprawdzenia, czy plik jest rzeczywiście jpgiem np. funkcją exif_imagetype. |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat A najlepiej byłoby zapobiec powstawaniu tego błędu, czyli uzależnić wykonanie wierszy 16-20 od wyniku sprawdzenia, czy plik jest rzeczywiście jpgiem Ale on wlasnie przy pomocy wierszy 16-20 sprawdza, czy plik to jpg czy nie . Ot taka logika (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Ale on wlasnie przy pomocy wierszy 16-20 sprawdza, czy plik to jpg czy nie . Ot taka logika (IMG:style_emoticons/default/wink.gif) No racja. Ale za słabo sprawdza (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Alez ja nie mowie ze to jest dobre, ja tylko mowie ze autor obral sobie taka beznadziejna droge (IMG:style_emoticons/default/smile.gif)
Oczywiscie ze funkcja ktora podales jest o niebo lepsza (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Plik, który poddajesz obróbce to PNG, a nie JPEG.
Z jakiegoś powodu i raczej nie pod wpływem powyższego fragmentu kodu poddajesz ten plik obróbce przy pomocy imgecreatefromjpeg w klasie DataWriter (czyli tam wpuszczasz JPEG, który jest PNG - ma tylko rozszerzenie jpg/jpeg). |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Kurcze, ile razy mozna to powtarzac: on tak robi, poniewaz on w ten sposob rozpoznaje typ plikow. No spojrzcie na jego kod. On bierze w ten sposob kazdy plik i sprawdza czy da sie otworzyc jako png. Jak sie da, znaczy ze to png. Potem sprawdza czy da sie otworzyc jako .jpg. Jak sie da, znaczy ze to jpg itd....
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
nospor,
kurczę, nie przeczę i widzę to. Tyko co z tego, że sprawdza, skoro poddaje obróbce przy pomocy funkcji imagecreatefromjpeg plik, który nie jest JPEGiem. Albo więc fragment kodu, który pokazał nie ma związku (nie używa go wcale) z wykorzystaniem klasy DataWriter, albo źle interpretuje/wykorzystuje wynik ($is_png). |
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ale on blad dostaje juz na typ etapie:
$im = @imagecreatefromjpeg($tempFullPath); a ten etap sluzy mu do sprawdzanie czy jest to jpg czy nie. Jedne z nas czegos nie widzi (i nie, nie pije do ciebie, ja tez moge nie widziec choc na chwile obecna bardziej mi sie wydaje ze ty) (IMG:style_emoticons/default/wink.gif) Tak, ja wiem, ze to jest beznadziejny sposob, na sprawdzanie czy cos jest jpg png czy gif. Ale tak ma, tak to robi, nic na to nie poradze. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Najzwyczajniej nie widzisz, że mam inny tok myślenia. Mianowicie opieram go na tym, że uważam kod, który podał autor za fragment, który nie wywołuje błędu (jest innym fragmentem DataWriter.php lub całkowicie innym skryptem). Ale może się mylę.
|
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Mianowicie opieram go na tym, że uważam kod, który podał autor za fragment, który nie wywołuje błędu No a ja wlasnie wrecz przeciwnie (IMG:style_emoticons/default/wink.gif) Ta linia: - library/Andy/ConvertImage/DataWriter.php:216 to linia 16 z pierwszego posta autora. Jak widzisz w tym kodzie z pierwszego posta, on uzywa imagecreatefromgif by sprawdzic czy to gif imagecreatefromjpeg by sprawdzic czy to jpeg imagecreatefrompng by sprawdzic czy to png On to uzywa bezwarunkowo, za kazdym razem, dla kazdego pliku niezaleznie od tego czy to gif, jpeg czy png. On to uzywa by dopiero sprawdzic czy to jest gif a moze jpg a moze png. Dlatego dostaje blad bo uzywa tego zawsze niezaleznie od typu pliku. Jak to poprawic juz pisalismy |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 21:27 |