Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Image::Magick в Perl не работают стандартные процедуры

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

sergsd

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
Подскажите пожалуйста.
Долго я писал сайт и решил выложить наконец-то на хостинг.  
Предисловие.
У меня на компе Винда и всё работало хорошо. В панеле администрирования сайта у меня используется модуль Image::Magick для ресайза картинок.
Заранее поинтересовался у хостера, будел ли на моем тарифном плане поддерживаться этот модуль. Ответили, что, конечно, ДА. Хостинг на UNIX. Оплатил, залил - не работает.
Позвонил, говорю, так и так не работает. Ответ - на вашем тарифном плане и не будет! Я говорю, ваш сотрудник, ответил мне, что точно будет, благо вопрос я задавал письменно, в ответ - заикание, говорит, что он и есть тот сотрудник, что ему так сказал их админ. Вообщем немного поругал их - к вечеру всё установили. Вроде заработало(обратился к модулю), при более тщательной проверке оказалось, что не до конца.  
Вопрос:
При исследование на простеньком скрипте оказалось, что не работаю процедуры Write и Resize.
Вот код:

Код:
#!/usr/bin/perl
use Image::Magick;
    my($img,$width);
    my($image);  
    $image = Image::Magick->new;
    $img='photo.jpg';
    $width=150;
    $x = $image->Read($img);  
   ($ox,$oy)=$image->Get('base-columns','base-rows');  
   $ny=int(($oy/$ox)*$width);  
   if($ox>$width) {  
     #$image->Resize(geometry=>geometry, width=>$width, height=>$ny);  
     #$x = $image->Write('photo2.jpg');  
   }
print "Content-type: text/html\n\n";
print "Размер $img изменен! width=$width height=$ny<br>";
   
  exit(0);  

 
Если раскоментировать строки, то выдает 500 ошибку, а в логах Premature end of script headers, т.е. процедуры вызывают ошибку.
 
Подскажите, пожалуйста, в чем дело? Мне хостера долбить дальше или я что-то не так пишу, может на UNIX-е по другому надо?

Всего записей: 273 | Зарегистр. 20-06-2003 | Отправлено: 23:53 19-03-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
print "Content-type: text/html\n\n";  

вверх перетащите и посмотрите что получится

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:03 20-03-2009
sergsd

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пробовал и так, и так - не работает...

Всего записей: 273 | Зарегистр. 20-06-2003 | Отправлено: 14:18 20-03-2009
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добавьте в начало:

Код:
 
use CGI::Carp qw(fatalsToBrowser);
 

И отпишите - что выдает.

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 15:19 20-03-2009
sergsd

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt, добавил. Всё также. Если раскоментировать те строки - ошибка 500. В броузер подробные ошибки не выдает.

Всего записей: 273 | Зарегистр. 20-06-2003 | Отправлено: 15:35 20-03-2009
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
sergsd, не здорово.
Попробуйте следующий вариант:

Код:
 
#!/usr/bin/perl
$|=1;
BEGIN {
    sub die_print {
      my $message = shift;
      chomp($message);
 
      print "Content-type:text/plain;\n\n", $message;
    }
 
    $SIG{KILL} = $SIG{DIE} = $SIG{STOP} = $SIG{WARN} = \&die_print;
}
 
use Image::Magick;  
    my($img,$width);  
    my($image);  
    $image = Image::Magick->new;  
    $img='./photo.jpg';  
    $width=150;  
    $x = $image->Read($img);  
   ($ox,$oy)=$image->Get('base-columns','base-rows');  
   $ny=int(($oy/$ox)*$width);  
 
   if($ox>$width) {    
     $image->Resize(geometry=>geometry, width=>$width, height=>$ny);  
     $x = $image->Write('./photo2.jpg');  
   }  
print "Content-type: text/html\n\n";  
print "Размер $img изменен! width=$width height=$ny<br>";
 
 

 
Вообще же код выглядит вполне здоровым.

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 18:01 20-03-2009
sergsd

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CheRt, всё та же ошибка.
Видать админ их чо-то не так установил, буду долбить их.
Большое спасибо, Cheery и CheRt, за оказанную помощь!
 

Всего записей: 273 | Зарегистр. 20-06-2003 | Отправлено: 00:07 21-03-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sergsd

Цитата:
Пробовал и так, и так - не работает.

но тогда в логе ошибок не будет

Цитата:
Premature end of script headers



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:12 21-03-2009
sergsd

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не мог никак написать- были проблемы с ру-бордом.
 
Вообщем, после переписики с админом сначала проблема была решена, а потом опять нет
 
Сначала он мне ответил:

Цитата:
> Здравствуйте.  
>  
> Код у Вас был неправильный.  
> Необходимо указывать параметр geometry в методе Resize, а не писать  
> слово geometry.  
> Также были ещё некоторые warning'и.  
> Мы дали Вам доступ по ssh, для отладки скриптов. Используйте perl -W  
> test.cgi. Реквизиты доступа такие же как и для доступа по ftp.  

 
КОД test.cgi:
 
 

Код:
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
#CGI::Carp qw(fatalsToBrowser);
use Image::Magick;  
    my($img,$width);  
    my($image);  
    $image = Image::Magick->new;  
    $img='/hspe/temp/photo.jpg';  
    $width="150";  
    $x = "";
    $ny = "";
    $x = $image->Read($img);  
   ($ox,$oy)=$image->Get('base-columns','base-rows');  
   $ny=int(($oy/$ox)*$width);  
   if($ox>$width) {    
     $image->Resize(geometry=>"150x150", width=>$width, height=>$ny);  
     $x = $image->Write('../temp/photo2.jpg');  
   }  
print "Размер $img изменен! width=$width height=$ny<br>";  
   
  exit(0);    

 
Потом выявилась проблема, что картинки размером больше 100Кб не могут обрабатываться, в апаче стоят директивы на лимит по памяти 16мб. Долго разбирался с хостером - убедить, что если такой простой скрипт не может обработать картинку 100Кб- то это не поддержка модуля Image:Magick, как они мне обещали до этого.
Более подробную инфу оставил в теме хостинг здесь.

Всего записей: 273 | Зарегистр. 20-06-2003 | Отправлено: 18:30 06-04-2009
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Image::Magick в Perl не работают стандартные процедуры


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru