Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> @ w funkcjach na nginxie?, wyłączenie błędów
warder
post
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:

  1. //#####################################
  2. // determine image type
  3. //#####################################
  4.  
  5. // declare variables
  6. $is_gif = false;
  7. $is_jpg = false;
  8. $is_png = false;
  9.  
  10. $im = @imagecreatefromgif($tempFullPath);
  11. if ($im)
  12. {
  13. $is_gif = true;
  14. }
  15.  
  16. $im = @imagecreatefromjpeg($tempFullPath);
  17. if ($im)
  18. {
  19. $is_jpg = true;
  20. }
  21.  
  22. $im = @imagecreatefrompng($tempFullPath);
  23. if ($im)
  24. {
  25. $is_png = true;
  26. }
  27.  
  28. if ($is_gif == false AND $is_jpg == false AND $is_png == false)
  29. {
  30. $done = 'yes';
  31. }



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)
Go to the top of the page
+Quote Post
ohm
post
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?
Go to the top of the page
+Quote Post
nospor
post
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.
Go to the top of the page
+Quote Post
bostaf
post
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.
Go to the top of the page
+Quote Post
nospor
post
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)
Go to the top of the page
+Quote Post
bostaf
post
Post #6





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(nospor @ 25.04.2017, 15:18:42 ) *
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)
Go to the top of the page
+Quote Post
nospor
post
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)
Go to the top of the page
+Quote Post
trueblue
post
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).
Go to the top of the page
+Quote Post
nospor
post
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....
Go to the top of the page
+Quote Post
trueblue
post
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).
Go to the top of the page
+Quote Post
nospor
post
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.
Go to the top of the page
+Quote Post
trueblue
post
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ę.
Go to the top of the page
+Quote Post
nospor
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 21:27