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 | ||
|
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
Первый класс. Зимние каникулы ^_^
-
#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
итого :
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 так:
и нифига…
люди, нид хелп