Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> @ 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
 
Start new topic
Odpowiedzi
bostaf
post
Post #2





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

Posty w temacie


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 Aktualny czas: 6.10.2025 - 19:38