Web-pl

Obraz generowany przez GD w PHP Obraz nie może być wyświetlany, ponieważ zawiera błędy w Firefoksie

Podczas generowania obrazu za pomocą PHP, na przykład dodawania znaku wodnego do obrazu przechowywanego na serwerze, przy użyciu poniższego kodu lub podobnego z obrazem JPEG zamiast PNG, obraz może nie być generowany i zgłaszać błąd, widoczny bezpośrednio w przeglądarce Firefox, ale nie w Chrome.

Ten rodzaj kodu, pomimo pracy na niektórych serwerach, może teraz działać na innych, czasem z niejasnych powodów. W moim przypadku działało idealnie dobrze lokalnie, ale wyprodukowane poniżej błędu na serwerze internetowym, obraz nie może być wyświetlany, ponieważ zawiera błędy.

Problem może wynikać z kilku powodów: oto niektóre z nich:

  • Dane wyjściowe zostały już wcześniej ustawione
  • Prawdziwy błąd generowania obrazu
  • Używany jest niewłaściwy typ obrazu
  • Biblioteka obrazów nie jest zainstalowana
PHP GD generated image The image cannot be displayed because it contains errors in Firefox : Error The image cannot be displayed because in contains errors on Firefox
Błąd Obraz nie może zostać wyświetlony, ponieważ zawiera błędy w Firefoksie
$stamp = imagecreatefrompng('watermark.png');
if(!$im = imagecreatefrompng('image.png')) die('Error generating image');
$marge_right = $marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

$copyimage = imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
if(!imagedestroy($im)) die('Error generating image');
if(!imagedestroy($stamp)) die('Error generating image');

Dane wyjściowe zostały już wcześniej ustawione

Nawet jeśli nie celowo, może być na przykład na przykład, że inne poprzednie skrypty zawierały spacje na końcu – aby uniknąć tego błędu, upewnij się, że, jak zaleca PHP, nie zamykaj skryptów z tagiem końcowym PHP ?>

Następnie, przed użyciem funkcji nagłówka, użyj następującego kodu, aby upewnić się, że poprzednio ustawiony nagłówek został odrzucony

 

foreach (getallheaders() as $name => $value) {
header_remove($name);
}

A także ta funkcja, aby upewnić się, że nie zostały wygenerowane żadne dane wyjściowe przed nagłówkiem i obrazem

ob_end_clean();

Rozwiązało to problem w moim przypadku, a obraz został poprawnie wyświetlony ponownie:

PHP GD generated image The image cannot be displayed because it contains errors in Firefox : Dynamically generated image using PHP
Dynamicznie generowany obraz za pomocą PHP

Prawdziwy błąd generowania obrazu

W przypadku wygenerowania prawdziwego błędu podczas generowania obrazu, upewnij się, że PHP jest ustawione na wyświetlanie wszystkich możliwych rodzajów błędów i sprawdź odpowiednie dzienniki, aby móc je wyśledzić i rozwiązać.

Poniższy kod sprawi, że PHP zgłosi wszystkie błędy w dzienniku:

 

error_reporting(E_ALL);
ini_set('display_errors', '1');

Możesz wtedy dowiedzieć się, że zgłoszono pewne błędy, nawet jeśli nie pojawiły się w wyjściowym html, z powodu konfiguracji serwera.

Używany jest niewłaściwy typ obrazu

Upewnij się, że używane typy obrazów są poprawne, na przykład używając tego kodu, aby odróżnić png i jpeg.

Upewnij się także, że nagłówek jest poprawny w zależności od użytego wyjścia, w zależności od użytej funkcji generowania obrazu

 

//to generate png image
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
//to generate jpeg image
header('Content-type: image/jpeg');
if(!imagejpeg($im)) die('Error generating image');

Biblioteka obrazów nie jest zainstalowana

Aby upewnić się, że biblioteki obrazów są zainstalowane. Aby to zrobić, uruchom funkcję phpinfo (); w skrypcie i sprawdź dane wyjściowe dla następującej wartości związanej z PHP GD, biblioteki graficznej używanej przez funkcje takie jak imagepng ();

W przypadku braku pakietów, sposób rozwiązania zależy od konfiguracji lokalnej, poprzez dodanie pakietu za pomocą poleceń PEAR lub za pomocą wbudowanego rozwiązania hosta internetowego do instalacji pakietu.

 

PHP GD generated image The image cannot be displayed because it contains errors in Firefox : PHP GD package details using the phpinfo() function
  Szczegóły pakietu PHP GD za pomocą funkcji phpinfo ()

Źródła