Gd png error setjmp returns error condition

Warning при работе с GD. (а именно с imagepng ()) PHP Решение и ответ на вопрос 239820

11 / 11 / 4

Регистрация: 01.02.2011

Сообщений: 111

1

08.02.2011, 14:35. Показов 6146. Ответов 4


Господа форумчане! подскажите пожалуйста отве на вот такой вопрос:

Написал я некий код, который изменяет размер изображения и записывает его в папку с оригиналом. Но при записи на диск функцией imagepng (). Вылазит ошибка:

Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib failed to initialize compressor — stream error in C:Program FilesApache GroupApachehtdocs… on line 1746

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in C:Program FilesApache GroupApachehtdocs… on line 1746

В нижевыложенном листинге ошибка возникнет на 78 строке.
При этом если поменять imagepng (), на скажем, imagejpeg или imagegif (), то всё нормально уменьшает и записывает — файл читается.

В случае с imagepng () — файл создается, но прочитать его невозможно и вылазит ошибка!

В чем может быть дело — строка «…fatal libpng error…» — наталкивает на мысль что проблема в самой библиотеке … Но может что-то надо просто еще дополнительно включить/дописать/исправить для нормальной работы функции?

Выкладываю код с комментариями:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
function createResizedCopy (
        # ----------------------------------------------------------
        $pathToImage,   // путь к файлу
            
        $imgHeight=0,   // высота
        $imgWidth=0,    // ширина
        $imgQuality=70, // качество
        $expand=0,      // растягивать изображение если оно меньше $ImageHeight и $ImageWidth
        $with_bgr=0     // делать на белом фоне
        # ----------------------------------------------------------
            ) {
        
    if (!is_file($pathToImage))
            return false;
        
    $imageinfo      = getimagesize($pathToImage);                       // данные о файле
        
    $baseName       = pathinfo ($pathToImage, PATHINFO_BASENAME );      // полное имя файла           
    $filename       = pathinfo ($pathToImage, PATHINFO_FILENAME );      // имя без расширения
    $path           = pathinfo ($pathToImage, PATHINFO_DIRNAME );       // путь к файлу
    $extension      = pathinfo ($pathToImage, PATHINFO_EXTENSION );     // расширение
        
    $newFilename    = $filename.SMALLPICTURE_PREFIX.".".$extension;     //имя измененного файла
 
 
        
    //Берем за базу высоту. Новая высота приравнена к вводимой. Тогда ширина настолько уменьшится, 
    //насколько уменьшилась новая величина по отношению к старой, т.е. сохраняем пропорции(поля будут сбоку)
    $imgHeight2 = $imgHeight;
    $imgWidth2 = round($imageinfo[0]*($imgHeight2/$imageinfo[1]));
                                
 
    //Но если в результате ширина остается больше чем требуемая, то берем за базу ширину и
    //изменяем высоту относительно ширины в пропорции (поля будут сверху)
    if ($imgWidth2 > $imgWidth){
        $imgWidth2 = $imgWidth;
        $imgWidth2 = (int)round($imageinfo[1]*($imgWidth2/$imageinfo[0]));
    }
                                
    // cоздаем новое изображение на основании загруженного
    switch ($extension) {
        case 'jpg':
            $inimg = imagecreatefromjpeg($pathToImage); 
            break;
        case 'jpeg':
            $inimg = imagecreatefromjpeg($pathToImage); 
            break;                                      
        case 'gif':
            $inimg = imagecreatefromgif($pathToImage); 
            break;
        case 'png':
            $inimg = imagecreatefrompng($pathToImage);
            break;
                    
    }
 
    // cоздаем изображение true color с новыми размерами - "холст"
    $tmp = imagecreatetruecolor($imgWidth2, $imgHeight2);
                                
    // в изображение $tmp перегоняем с новыми размерами $inimg
    imagecopyresampled($tmp, $inimg, 0, 0, 0, 0, $imgWidth2, $imgHeight2, $imageinfo[0], $imageinfo[1]);
                
    // записываем уменьшенное изображение 
    switch ($extension) {
        case 'jpg':
            $resInimg = imagejpeg($tmp, "$path/$newFilename", $imgQuality); 
            break;
        case 'jpeg':
            $resInimg = imagejpeg($tmp, "$path/$newFilename", $imgQuality); 
            break;                                      
        case 'gif':
            $resInimg = imagegif($tmp, "$path/$newFilename", $imgQuality); 
            break;
        case 'png':
            $resInimg = imagepng($tmp, "$path/$newFilename", $imgQuality);
            break;                                      
    }
        
    return $resInimg;
    
}

help!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Bug #75778 Corrupt PNG image causes non-recoverable fatal PHP error
Submitted: 2018-01-08 12:00 UTC Modified: 2018-01-08 13:47 UTC
From: info at e-abi dot ee Assigned: cmb (profile)
Status: Not a bug Package: GD related
PHP Version: 5.6.33 OS: Debian GNU/Linux 9 (stretch)
Private report: No CVE-ID: None

 [2018-01-08 12:00 UTC] info at e-abi dot ee

Description:
------------
Corrupt PNG image causes non-recoverable fatal PHP error.
PHP Fatal error:  imagecreatefrompng(): gd-png: fatal libpng error: Read Error

Also affected:
PHP 7.0.26
PHP 7.1.13
PHP 7.2.1


Test script:
---------------
<?php
ini_set('display_errors', 1);
#actual image location: http://www.knoraki.se/media/ACME_191101_440x440_1.png

echo print_r(gd_info(), true);

$image = false;
$filename = 'ACME_191101_440x440_1.png';
$image = imagecreatefrompng($filename);
//$image = getimagesize($filename);
if (!$image) {
	$image = 'failed';
}
echo print_r($image, true);


Expected result:
----------------
Array
(
    [GD Version] => bundled (2.1.0 compatible)
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [T1Lib Support] =>
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] => 1
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] => 1
    [XBM Support] => 1
    [WebP Support] => 1
    [JIS-mapped Japanese Font Support] =>
)

Warning: imagecreatefrompng(): gd-png:  fatal libpng error: Read Error: truncate
d data in D:Bill-Datatmpphp-gd-bugimage-test.php on line 8

Warning: imagecreatefrompng(): gd-png error: setjmp returns error condition in D
:Bill-Datatmpphp-gd-bugimage-test.php on line 8

Warning: imagecreatefrompng(): 'ACME_191101_440x440_1.png' is not a valid PNG fi
le in D:Bill-Datatmpphp-gd-bugimage-test.php on line 8
failed


Actual result:
--------------
root@vmi137424:/var/www/magento.eabi.ee/php-gd-bug# php7.1 image-test.php
Array
(
    [GD Version] => 2.2.4
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] => 1
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] => 1
    [XBM Support] => 1
    [WebP Support] => 1
    [JIS-mapped Japanese Font Support] =>
)
PHP Fatal error:  imagecreatefrompng(): gd-png: fatal libpng error: Read Error: truncated data
 in /var/www/magento.eabi.ee/php-gd-bug/image-test.php on line 8

Fatal error: imagecreatefrompng(): gd-png: fatal libpng error: Read Error: truncated data
 in /var/www/magento.eabi.ee/php-gd-bug/image-test.php on line 8

#notice how the final "failed" statement is not displayed because the script is halted.


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports

 [2018-01-08 13:47 UTC] cmb@php.net

-Status: Open
+Status: Not a bug
-Assigned To:
+Assigned To: cmb

I’m migrating a WordPress site from one server another and I’ve run to to a problem with some of the images not being displayed. The images are being piped though a PHP script to dynamically resize them. After some investigation I’ve noticed that the issue is only effecting PNG images and found errors relating to gd-png in the webserver logs. As a test I created a simple php script (at the bottom of this post) which just opens a PNG with imagecreatefrompng and every time access the script via a browser I get the following errors…

Code:

PHP Warning: imagecreatefrompng(): gd-png: fatal libpng error: bad parameters to zlib in .../test.php on line 10

Code:

PHP Warning: imagecreatefrompng(): gd-png error: setjmp returns error condition in .../test.php on line 10

Code:

PHP Warning: imagecreatefrompng(): 'test.png' is not a valid PNG file in .../test.php on line 10

I have tried several different png’s from several different sources in case the png’s where the problem, but alias it seems to effect all png’s regardless of origin.

Most interestingly, if I run the same script from the command line (su’d to the webserver user!) I do not get the errors (I get the raw PNG but that’s expected).

I’m not sure if that makes it a PHP problem or an apache24 problem, but I can’t think of any reason why running the script via the webserver should cause such a problem. No permission issues are in play.

I have two webservers setup very similar, both experience the same problem.

My apologies if this is not the correct place to report such a problem. I have also posted this problem to PHP’s Bug Tracking System (https://bugs.php.net/bug.php?id=70276) but I’m not 100% sure its a PHP problem (because it works via the CLI).

Note, I spent quite a few hours on this yesterday evening and was running PHP 5.6.11 at the time but I have this morning upgraded to 5.6.12 , however the problem persists.

Any advice gratefully received!

Regards

Steve
# uname -a

Code:

FreeBSD indigo 10.0-RELEASE-p17 FreeBSD 10.0-RELEASE-p17 #0: Tue Jan 27 13:45:18 UTC 2015

# httpd -V

Code:

Server version: Apache/2.4.16 (FreeBSD)
Server built: Aug 14 2015 23:52:56
Server's Module Magic Number: 20120211:47
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/usr/local"
-D SUEXEC_BIN="/usr/local/bin/suexec"
-D DEFAULT_PIDLOG="/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="/var/run/apache_runtime_status"
-D DEFAULT_ERRORLOG="/var/log/httpd-error.log"
-D AP_TYPES_CONFIG_FILE="etc/apache24/mime.types"
-D SERVER_CONFIG_FILE="etc/apache24/httpd.conf"

# php -i

Code:

phpinfo()
PHP Version => 5.6.12

System => FreeBSD indigo 10.0-RELEASE-p17 FreeBSD 10.0-RELEASE-p17 #0: Tue Jan 27 13:45:18 UTC 2015 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64
Build Date => Aug 15 2015 12:38:40
Configure Command => './configure' '--with-layout=GNU' '--localstatedir=/var' '--with-config-file-scan-dir=/usr/local/etc/php' '--disable-all' '--enable-libxml' '--enable-mysqlnd' '--with-libxml-dir=/usr/local' '--with-pcre-regex=/usr/local' '--with-zlib-dir=/usr' '--program-prefix=' '--enable-fpm' '--with-fpm-user=www' '--with-fpm-group=www' '--with-regex=php' '--with-zend-vm=CALL' '--prefix=/usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/' '--build=amd64-portbld-freebsd10.0' 'build_alias=amd64-portbld-freebsd10.0' 'CC=cc' 'CFLAGS=-O2 '-pipe' '-fstack-protector' '-fno-strict-aliasing'' 'LDFLAGS= '-fstack-protector'' 'LIBS=-lpthread' 'CPPFLAGS=' 'CPP=cpp' 'CXX=c++' 'CXXFLAGS=-O2 '-pipe' '-fstack-protector' '-fno-strict-aliasing''
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /usr/local/etc
Loaded Configuration File => /usr/local/etc/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php
Additional .ini files parsed => /usr/local/etc/php/extensions.ini

PHP API => 20131106
PHP Extension => 20131226
Zend Extension => 220131226
Zend Extension Build => API220131226,NTS
PHP Extension Build => API20131226,NTS
Debug Build => no
Thread Safety => disabled
Zend Signal Handling => disabled
Zend Memory Manager => enabled
Zend Multibyte Support => provided by mbstring
IPv6 Support => enabled
DTrace Support => disabled

Registered PHP Streams => compress.bzip2, php, file, glob, data, http, ftp, https, ftps, compress.zlib, zip, phar
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters => bzip2.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*, mcrypt.*, mdecrypt.*, zlib.*
...
...
...
gd

GD Support => enabled
GD Version => bundled (2.1.0 compatible)
FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.6.0
T1Lib Support => enabled
GIF Read Support => enabled
GIF Create Support => enabled
JPEG Support => enabled
libJPEG Version => 8
PNG Support => enabled
libPNG Version => 1.6.17
WBMP Support => enabled
XPM Support => enabled
libXpm Version => 30411
XBM Support => enabled
JIS-mapped Japanese Font Support => enabled
...
...
...
zlib

ZLib Support => enabled
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Compiled Version => 1.2.8
Linked Version => 1.2.8

Test script:

Code:

<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

function LoadPNG($imgname)
{
/* Attempt to open */
$im = imagecreatefrompng($imgname);

/* See if it failed */
if(!$im)
{ // create error image
$im = imagecreatetruecolor(1500, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 1500, 30, $bgc);
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}

return $im;
}

header('Content-Type: image/png');

$img = LoadPNG('test.png');

imagepng($img);
imagedestroy($img);
?>

  • #1

Как игнорировать fatal error?

Функция imagecreatefrompng на некоторых картинках выдает fatal error и останавливает скрипт. Как игнорировать эту ошибку чтобы скрипт продолжал дальше работать?

  • #2

[m]error_reporting[/m]
заглушить ф-цию -> @

Но лучше искать проблему в коде.

  • #3

Апокалипсис
это шутка такая?

  • #4

antono
Писать скрипты без ошибок. Не стоит игнорировать даже Notice и Strict Standards, не то что Fatal error…

Фанат


  • #5

мля.
граждане отвечающие.
ВОПРОС ЧИТАТЬ НЕ ПРОБОВАЛИ?

-~{}~ 14.08.07 12:12:

antono
вообще, очень странные вещи ты пишешь.
если imagecreatefrompng не может создать картинку, то она выдает не фатальную ошибку.

ты не мог бы потрудиться привести здесь точный текст ошибки, а не свой краткий пересказ?
заранее большое спасибо за труды

  • #6

*****, у меня подобная проблема была при нехватки памяти.
Вываливался сам php, а не функция в какое-либо восстановимое состояние.
Помогло только увеличение памяти.

Фанат


  • #7

ну, вообще логично.
в общем, нужно сообщение об ошибке, а не отсебятина.

  • #8

Вот что вываливает:

Fatal error: imagecreatefrompng(): gd-png: fatal libpng error: IDAT: CRC error in /home/test/site.ru/phpbb/test.php on line 13

Дело не в нехватке памяти, т.к. картинки маленькие по 10-20 кб.

Картинки действительно ошибочные, когда их смотришь визуально. Может как-то проверять png перед imagecreatefrompng?

Фанат


  • #9

попробуй обновить пхп и/или гд
фаталов она не должна выдавать.

  • #10

А другого варианта нет? Мне не так уж важно что эта картинка не прочитается, эта ошибка очень редко выскакивае. Можно ли такие ошибки игнорировать и продолжать выполнение скипта?

  • #11

[cорри больше с температурой на форум не хожу]

  • #12

>Можно ли такие ошибки игнорировать и продолжать выполнение скипта?
нет.
именно поэтому они называются «фатальными».

Фанат


  • #14

***** спасибо, применил скрипт из листинга 2.
Делаю лог скрипта на жеский диск, затем при его остановке запускаю его заново.

Кстати пробовал запускать imagecreatefrompng на 3 различных хостингах и на локальном компьютере — везде fatal error.

Mr_Max

Mr_Max

Первый класс. Зимние каникулы ^_^


  • #17

Версии: 4.4.2, 4.3.10

Вот попробовал на PHP 5 версии, выдает 3 варнинга и не прекращает работу:

Warning: imagecreatefrompng() [function.imagecreatefrompng]: gd-png: fatal libpng error: Extra compressed data in /usr/home/admin/domains/site.ru/public_html/1.php on line 6

Warning: imagecreatefrompng() [function.imagecreatefrompng]: gd-png error: setjmp returns error condition in /usr/home/admin/domains/site.ru/public_html/1.php on line 6

Warning: imagecreatefrompng() [function.imagecreatefrompng]: ‘image.png’ is not a valid PNG file in /usr/home/admin/domains/site.ru/public_html/1.php on line 6

  • #18

>Версии: 4.4.2, 4.3.10
о, ну это уже прошлый век.

>Вот попробовал на PHP 5 версии, выдает 3 варнинга и не прекращает работу
ч. и т.д.

всем привет
на днях что-то химичил с портами.. ставил-переставлял-обновлял.
в итоге понял что поломал немного свой php
итого :smile: :
uname

Код: Выделить всё

FreeBSD host 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Fri May  1 08:49:13 UTC 2009     root@walker.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386

php -v

Код: Выделить всё

PHP 5.2.12 with Suhosin-Patch 0.9.7 (cli) (built: Dec 30 2009 17:59:18)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

имею следующие ошибки:
DLE (ошибка 1)
при добавлении новой картинки, на нее накладывается водяной знак.
точнее, до моих ковыряний накладывался.
после ковыряний, при добавлении, получаю такое:

Код: Выделить всё

Warning: imagecreatefrompng(): gd-png: fatal libpng error: [00][00][00][00]: unknown critical chunk in /usr/local/host/game/engine/classes/thumb.class.php on line 203 
Warning: imagecreatefrompng(): gd-png error: setjmp returns error condition in /usr/local/host/game/engine/classes/thumb.class.php on line 203 
Warning: imagecreatefrompng(): '/usr/local/host/game/templates/fun/dleimages/watermark_dark.png' is not a valid PNG file in /usr/local/host/game/engine/classes/thumb.class.php on line 203 
Warning: imagealphablending(): supplied argument is not a valid Image resource in /usr/local/host/game/engine/classes/thumb.class.php on line 206 
Warning: imagecopy(): supplied argument is not a valid Image resource in /usr/local/host/game/engine/classes/thumb.class.php on line 208 
Warning: imagedestroy(): supplied argument is not a valid Image resource in /usr/local/host/game/engine/classes/thumb.class.php on line 210

картинка на сервер влилась, но водянки нет.

CnStats (ошибка 2)
при отображении счетчика посещений на сайтах (сайтов кучка, все внутренние) имею такие ошибки (счетчик не выводится)

Код: Выделить всё

PHP Warning:  imagecreatefrompng() [<a href='function.imagecreatefrompng'>function.imagecreatefrompng</a>]: gd-png:  fatal libpng error: [00][00][00][00]: unknown critical chunk in /usr/local/host/cnstats/cnt-show.php on line 15
PHP Warning:  imagecreatefrompng() [<a href='function.imagecreatefrompng'>function.imagecreatefrompng</a>]: gd-png error: setjmp returns error condition in /usr/local/host/cnstats/cnt-show.php on line 15
PHP Warning:  imagecreatefrompng() [<a href='function.imagecreatefrompng'>function.imagecreatefrompng</a>]: 'button.png' is not a valid PNG file in /usr/local/host/cnstats/cnt-show.php on line 15
PHP Warning:  imagecolorallocate(): supplied argument is not a valid Image resource in /usr/local/host/cnstats/cnt-show.php on line 16
PHP Warning:  imagecolorallocate(): supplied argument is not a valid Image resource in /usr/local/host/cnstats/cnt-show.php on line 17
PHP Warning:  imagestring(): supplied argument is not a valid Image resource in /usr/local/host/cnstats/cnt-show.php on line 18
PHP Warning:  imagestring(): supplied argument is not a valid Image resource in /usr/local/host/cnstats/cnt-show.php on line 19
PHP Warning:  imagestring(): supplied argument is not a valid Image resource in /usr/local/host/cnstats/cnt-show.php on line 20
PHP Warning:  imagepng(): supplied argument is not a valid Image resource in /usr/local/host/cnstats/cnt-show.php on line 21
PHP Warning:  imagedestroy(): supplied argument is not a valid Image resource in /usr/local/host/cnstats/cnt-show.php on line 22

делал такое:

пересобирал php так:

и нифига…
люди, нид хелп :cry:

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Gcc fatal error no input files compilation terminated
  • Gcc fatal error cannot execute cc1plus execvp no such file or directory
  • Gcc exec format error
  • Gcc exe internal error aborted program collect2
  • Gcc exe fatal error no input files

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии