Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> У меня сломался Imagick, Помогите, кто чем может. 
:(
    Опции темы
IgorIV
Дата 12.1.2011, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Не нашел раздела более подходящего.
Итак, проблема.
Дано.
FreeBSD 8.0-RELEASE
ImageMagick-6.6.6.10
pecl-imagick-3.0.1
png-1.4.5

В результате какого-то обновления сломался частично Imagick. Не читает файлы png. Совсем. jpg и gif читает.
Попытался сделать downgrade порта ImageMagick, есть подозрение на него. Не получилось. Версия 6.6.4 требует библиотеку libltdl22, но такой нет. Она была упразднена месяц назад. 
Пытаюсь разобратся в коде Imagick. 
Вот такой код приводит к ошибке
Код

$handle = fopen($image_file, 'rb');

if ($handle) echo 'file is exist';
$img = new Imagick();
$img->readImageFile($handle);


Ошибка такая - 
Цитата

file is exist
Fatal error: Uncaught exception 'ImagickException' with message 'corrupt image `/var/tmp/magick-hXgqEWne' @ error/png.c/ReadPNGImage/3128'


Метод выглятид так
Код


/* {{{ proto bool Imagick::readImages(array files )
2776        Reads image from an array of filenames
2777    */
2778    PHP_METHOD(imagick, readimages)
2779    {
2780            zval *files;
2781            char *filename = NULL;
2782            int status = 0;
2783            php_imagick_object *intern;
2784            HashPosition pos;
2785            HashTable *hash_table;
2786            zval **ppzval, tmpcopy;
2787    
2788            /* Parse parameters given to function */
2789            if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &files) == FAILURE) {
2790                    return;
2791            }
2792    
2793            hash_table = Z_ARRVAL_P(files);
2794            intern = (php_imagick_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
2795    
2796            for(zend_hash_internal_pointer_reset_ex(hash_table, &pos);
2797                    zend_hash_has_more_elements_ex(hash_table, &pos) == SUCCESS;
2798                    zend_hash_move_forward_ex(hash_table, &pos)) {
2799    
2800                    if (zend_hash_get_current_data_ex(hash_table, (void**)&ppzval, &pos) == FAILURE) {
2801                            continue;
2802                    }
2803    
2804                    tmpcopy = **ppzval;
2805                    zval_copy_ctor(&tmpcopy);
2806                    INIT_PZVAL(&tmpcopy);
2807                    convert_to_string(&tmpcopy);
2808    
2809                    filename = estrdup(Z_STRVAL(tmpcopy));
2810                    status = read_image_into_magickwand(intern, 1, filename, strlen(filename) TSRMLS_CC);
2811    
2812                    zval_dtor(&tmpcopy);
2813    
2814                    if (status != IMAGICK_READ_WRITE_NO_ERROR) {
2815                            break;
2816                    }
2817    
2818                    efree(filename);
2819            }
2820            IMAGICK_CHECK_READ_OR_WRITE_ERROR(intern, filename, status, IMAGICK_FREE_FILENAME, "Unable to read the file: %s");
2821            RETURN_TRUE;
2822    }



Подскажите как добратся до места в котором читается именно файл. Чтобы понять что не так работает.
PM MAIL   Вверх
IgorIV
Дата 13.1.2011, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Озвучьте хоть какие идеи smile
PM MAIL   Вверх
oleantus
Дата 14.1.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.1.2011

Репутация: 1
Всего: 1



Здравствуйте,

Нашлось ли решение данной проблемы?
У меня такая же ситуация, не понятно из-за чего такое произошло.
Есть две практически одинаковые машины:
FreeBSD 8.1 Stable
png-1.4.5
ImageMagick-6.6.6.10
Один и тот же perl-скрипт на одной машине с png работает нормально, на другой вылетает аналогичный exception (Exception 425: corrupt image `' @ error/png.c/ReadPNGImage/3128) в коде:

my $status = $image -> BlobToImage($$data);

Переменная $data содержит ссылку на png-данные.
Там где работает используется perl-5.10, там где не работает - perl-5.12. Но я думаю, что дело не в версии perl, хотя кто знает.
Машины обновляются регулярно, но не одновременно, поэтому не могу сказать, когда точно перестало работать на одной из машин :(
Хотелось бы тоже найти решение данной проблемы.

Это сообщение отредактировал(а) oleantus - 14.1.2011, 14:28
PM MAIL   Вверх
IgorIV
Дата 14.1.2011, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



У меня подозрение на ImageMagick, где-то 90%. Потому как imagick не обновлялся давно. png тоже. А ИМ почти каждый месяц.
Сегодня попробую еще раз сделать даунгрейд портов. Просто у меня машина более-менее обновляется. На сервисе в интернете, где все работает версия ИМ - 6.6.2
PM MAIL   Вверх
oleantus
Дата 14.1.2011, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.1.2011

Репутация: 1
Всего: 1



Дело в том, что у меня на обеих машинах ImageMagick 6.6.6.10 и png-1.4.5. А ошибка только на одной из них, на другой все работает нормально. Вообще реально у меня на этих машинах различие только в версиях perl.
PM MAIL   Вверх
IgorIV
Дата 14.1.2011, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Да?!
Тогда давай
pkg_version -v
perl -V
Тогда есть еще одна мысля. Но честно говоря, на нее даже и не думал.
PM MAIL   Вверх
oleantus
Дата 15.1.2011, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.1.2011

Репутация: 1
Всего: 1



Все! У меня проблема решилась. Как я и предполагал - дело было в perl. Сделал downgrade до perl 5.10 и пересобрал все порты, зависящие от perl, в том числе и ImageMagick. В итоге теперь все работает. Но все равно волнует вопрос, почему же под perl 5.12 не работало?
PM MAIL   Вверх
IgorIV
Дата 15.1.2011, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



oleantus, поделись командами.
PM MAIL   Вверх
oleantus
Дата 15.1.2011, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.1.2011

Репутация: 1
Всего: 1



Я через portupgrade делал:

        pkgdb -Ff
        env DISABLE_CONFLICTS=1 portupgrade -o lang/perl5.10 -f perl-5.12.\*
        portupgrade -fr perl

Некоторые порты не пересобрались, пересобрал каждый по отдельности,
для каждого порта запускал

make deinstall reinstall clean

PM MAIL   Вверх
IgorIV
Дата 15.1.2011, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



oleantus, я имел ввиду 
perl -V

PM MAIL   Вверх
oleantus
Дата 15.1.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.1.2011

Репутация: 1
Всего: 1



perl -V

Summary of my perl5 (revision 5 version 10 subversion 1) configuration:

  Platform:
    osname=freebsd, osvers=8.1-stable, archname=amd64-freebsd
    config_args='-sde -Dprefix=/usr/local -Darchlib=/usr/local/lib/perl5/5.10.1/mach Dprivlib=/usr/local/lib/perl5/5.10.1 -Dman3dir=/usr/local/lib/perl5/5.10.1/perl/man/man3 -Dman1dir=/usr/local/man/man1 -Dsitearch=/usr/local/lib/perl5/site_perl/5.10.1/mach -Dsitelib=/usr/local/lib/perl5/site_perl/5.10.1 -Dscriptdir=/usr/local/bin -Dsiteman3dir=/usr/local/lib/perl5/5.10.1/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Ui_malloc -Ui_iconv -Uinstallusrbinperl -Dcc=cc -Duseshrplib -Dinc_version_list=none -Dccflags=-DAPPLLIB_EXP="/usr/local/lib/perl5/5.10.1/BSDPAN" -Doptimize=-g -DDEBUGGING -Ud_dosuid -Ui_gdbm -Dusethreads=n -Dusemymalloc=y -Duse64bitint'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=y, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-DAPPLLIB_EXP="/usr/local/lib/perl5/5.10.1/BSDPAN" -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include',
    optimize='-g',
    cppflags='-DAPPLLIB_EXP="/usr/local/lib/perl5/5.10.1/BSDPAN" -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.2.1 20070719  [FreeBSD]', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -Wl,-E  -fstack-protector -L/usr/local/lib'
    libpth=/usr/lib /usr/local/lib
    libs=-lgdbm -lm -lcrypt -lutil
    perllibs=-lm -lcrypt -lutil
    libc=, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='  -Wl,-R/usr/local/lib/perl5/5.10.1/mach/CORE'
    cccdlflags='-DPIC -fPIC', lddlflags='-shared  -L/usr/local/lib -fstack-protector'


Characteristics of this binary (from libperl):
  Compile-time options: DEBUGGING MYMALLOC PERL_DONT_CREATE_GVSV
                        PERL_MALLOC_WRAP USE_64_BIT_ALL USE_64_BIT_INT
                        USE_LARGE_FILES USE_PERLIO
  Built under freebsd
  Compiled at Jan 14 2011 22:43:20
  @INC:
    /usr/local/lib/perl5/5.10.1/BSDPAN
    /usr/local/lib/perl5/site_perl/5.10.1/mach
    /usr/local/lib/perl5/site_perl/5.10.1
    /usr/local/lib/perl5/5.10.1/mach
    /usr/local/lib/perl5/5.10.1
    .

PM MAIL   Вверх
IgorIV
Дата 16.1.2011, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Спасибо.
А на втором?
PM MAIL   Вверх
oleantus
Дата 16.1.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.1.2011

Репутация: 1
Всего: 1



На обеих машинах теперь одинаково. Там, где раньше был perl 5.12, я не посмотрел.
PM MAIL   Вверх
IgorIV
Дата 16.1.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



oleantus, еще раз спасибо!
Был перл 5.8, переделал на 5.10 и пересобрал 319 портов. Теперь работает.  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Разные вопросы"
Smartov

Сюда нужно постить только темы, которые нельзя отнести ни к одному из существующих разделов. Если вы не уверены, то просмотрите еще раз заголовки форумов, карту форума или попробуйте воспользоваться поиском.
Если вы все же не смогли найти подходящего раздела - создавайте тему здесь.


С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разные вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0942 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.