URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6763
[ Назад ]

Исходное сообщение
"Wide character in FCGI"

Отправлено Виталий , 09-Мрт-10 17:09 
Вот такая проблема при попытке запуска perl-сайта на mason.

Гугл говорит, что нужно ставить binmode, однако на дебиане все работает прекрасно, а тут переезжаем на centos.

Гуру, подскажите, что за нафиг.

Полностью ошибка:
Wide character in FCGI::Stream::PRINT at /usr/local/lib/perl5/site_perl/5.10.1/HTML/Mason/CGIHandler.pm line 105.


Содержание

Сообщения в этом обсуждении
"Wide character in FCGI"
Отправлено pavel_simple , 09-Мрт-10 17:22 
>Вот такая проблема при попытке запуска perl-сайта на mason.
>
>Гугл говорит, что нужно ставить binmode, однако на дебиане все работает прекрасно,
>а тут переезжаем на centos.
>
>Гуру, подскажите, что за нафиг.
>
>Полностью ошибка:
>Wide character in FCGI::Stream::PRINT at /usr/local/lib/perl5/site_perl/5.10.1/HTML/Mason/CGIHandler.pm line 105.

думаю что mason новый а модули CentOS для него в дистрибутиве старые -- см. рекомендуемые компоненты на движок


"Wide character in FCGI"
Отправлено Виталий , 09-Мрт-10 19:31 
Чего-то проапдейтил все модули, и нифига

"Wide character in FCGI"
Отправлено anonymous , 09-Мрт-10 23:40 
>Wide character in FCGI::Stream::PRINT at /usr/local/lib/perl5/site_perl/5.10.1/HTML/Mason/CGIHandler.pm line 105.

А что, если добавить в CGIHandler.pm такие строчики?

  use open ':utf8';
  use encoding 'utf8';


"Wide character in FCGI"
Отправлено zdm , 11-Мрт-10 20:38 
>Вот такая проблема при попытке запуска perl-сайта на mason.
>
>Гугл говорит, что нужно ставить binmode, однако на дебиане все работает прекрасно,
>а тут переезжаем на centos.
>
>Гуру, подскажите, что за нафиг.
>
>Полностью ошибка:
>Wide character in FCGI::Stream::PRINT at /usr/local/lib/perl5/site_perl/5.10.1/HTML/Mason/CGIHandler.pm line 105.

Та-же проблема на Centos 5.2, perl 5.10.1, при print в FCGI приложении.
binmode STDOUT в FCGI враппере не помогает.
Тот-же код под apache работает корректно.



"Wide character in FCGI"
Отправлено cuad0 , 19-Мрт-10 04:29 

>>Полностью ошибка:
>>Wide character in FCGI::Stream::PRINT at /usr/local/lib/perl5/site_perl/5.10.1/HTML/Mason/CGIHandler.pm line 105.

Это error или warning?


>Та-же проблема на Centos 5.2, perl 5.10.1, при print в FCGI приложении.

Имхо, без fcgi было бы в логах то же самое.
Сталкивался с таким. Общего решения не нашел, но иногда работало
no warnings 'utf8';
...пишу по давней памяти и на неспавшую голову, мог и ошибиться в синтаксисе.


>Тот-же код под apache работает корректно.

эммм, а под чем работает некорректно?



"Wide character in FCGI"
Отправлено zdm , 19-Мрт-10 18:16 
>[оверквотинг удален]
>Имхо, без fcgi было бы в логах то же самое.
>Сталкивался с таким. Общего решения не нашел, но иногда работало
>no warnings 'utf8';
>...пишу по давней памяти и на неспавшую голову, мог и ошибиться в
>синтаксисе.
>
>
>>Тот-же код под apache работает корректно.
>
>эммм, а под чем работает некорректно?

Корректно работает как CGI приложение под Apache.

Некорректно, когда самостоятельный FCGI демон.
# cat nginx_error.log
2010/03/19 11:13:53 [error] 24091#0: *1 FastCGI sent in stderr: "FCGI application error: Wide character in FCGI::Stream::PRINT at /var/www/pharaoh/Pharaoh/HTTP/Controller/Index.pm line 60" while reading response header from upstream, client: 95.132.240.254, server: wmstar.com.ua, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9012"

При этом FCGI в STDOUT ничего не возвращает, клиент получает пустую страницу.


"Wide character in FCGI"
Отправлено zdm , 19-Мрт-10 18:24 
>>[оверквотинг удален]
>>Имхо, без fcgi было бы в логах то же самое.
>>Сталкивался с таким. Общего решения не нашел, но иногда работало
>>no warnings 'utf8';

Не помогает.


>[оверквотинг удален]
>
>Некорректно, когда самостоятельный FCGI демон.
># cat nginx_error.log
>2010/03/19 11:13:53 [error] 24091#0: *1 FastCGI sent in stderr: "FCGI application error:
>Wide character in FCGI::Stream::PRINT at /var/www/pharaoh/Pharaoh/HTTP/Controller/Index.pm line 60" while reading response
>header from upstream, client: 95.132.240.254, server: wmstar.com.ua, request: "GET / HTTP/1.1",
>upstream: "fastcgi://127.0.0.1:9012"
>
>При этом FCGI в STDOUT ничего не возвращает, клиент получает пустую страницу.
>


"Wide character in FCGI"
Отправлено Виталий , 21-Мрт-10 11:48 
Resolved / Решено

Дело в том, что в модуле FCGI 0.69 произведены некоторые изменения в логике работы, без поддержки ошибочных старых вариантов. Они считают, что раньше программы функционировали неправильно.

Нехорошо они поступили в смысле поддержки уже написаных решений, да бог им судья.

Дружно откатываемся на FCGI 0.68 и проблема решена.


"Wide character in FCGI"
Отправлено zdm , 21-Мрт-10 16:51 
>Resolved / Решено
>
>Дело в том, что в модуле FCGI 0.69 произведены некоторые изменения в
>логике работы, без поддержки ошибочных старых вариантов. Они считают, что раньше
>программы функционировали неправильно.
>
>Нехорошо они поступили в смысле поддержки уже написаных решений, да бог им
>судья.
>
>Дружно откатываемся на FCGI 0.68 и проблема решена.

Version 0.68_01 --   10 Jan 2010  <mst@shadowcat.co.uk> Matt S Trout
    o Force signal handler installation so that we correctly install handlers
      for SIGPIPE. Fixes RT#5100 <bobtfish@bobtfish.net>
    o Make the PRINT method return the number of bytes written rather than
      undef to be consistent with the IO:: interface. Fixes RT#24347
      <David Dick>
    o Fix UTF-8 double encoding when FCGI is passed octets by downgrading
      them into bytes correctly. Fixes RT#52400 <chansen@cpan.org>

В исходниках FCGI::XL добавилась следующая конструкция в методах PRINT и WRITE:

#ifdef DO_UTF8
            if (DO_UTF8(ST(n)) && !sv_utf8_downgrade(ST(n), 1))
                croak("Wide character in FCGI::Stream::PRINT");
#endif

Может кто-то растолковать, что она делает?

В конечном итоге интересует, как все-же выводить контент в UTF-8 используя последние версии FCGI? У меня модули апдейтятся автоматически из CPAN (cpan upgrade).


"Wide character in FCGI"
Отправлено Виталий , 21-Мрт-10 22:38 
>Может кто-то растолковать, что она делает?
>
>В конечном итоге интересует, как все-же выводить контент в UTF-8 используя последние
>версии FCGI? У меня модули апдейтятся автоматически из CPAN (cpan upgrade).

Цитата из https://rt.cpan.org/Public/Bug/Display.html?id=54247

You are trying to output perl's internal UTF-X format, since it contains
code points above 0xFF (0x100) it can't be downgraded (utf8_downgrade).

use encoding 'utf8'; has no effect on FCGI.XS since it's using TIEHANDLE

> This simple code produce an error:
>
> Wide character in FCGI::Stream::PRINT at ./fcgi2.pl line 16.

Yeah, so your code was broken before, but it's now showing up as FCGI
started caring about doing the right thing, rather than just assuming
everything is bytes.

You need to encode your output correctly if you're using non ascii...


"Wide character in FCGI"
Отправлено voy , 28-Апр-10 20:17 
На откат не решился. Поменял код так с:
print $template->output;

на:
my $out = $template->output;
if (FCGI->VERSION > 0.68) {
     utf8::encode($out)
}
print $out

Удачи =)


"Wide character in FCGI"
Отправлено Николай , 16-Апр-15 12:08 
> На откат не решился. Поменял код так с:
> print $template->output;
> на:
> my $out = $template->output;
> if (FCGI->VERSION > 0.68) {
>      utf8::encode($out)
> }
> print $out
> Удачи =)

Прошло 5 лет а воз и ныне там ...

так же можно использовать модуль Encode, что напрямую рекомендуют в документации

print Encode::encode_utf8($template->output);



"Wide character in FCGI"
Отправлено Сергей , 08-Июн-17 15:20 
> Прошло 5 лет а воз и ныне там ...
> так же можно использовать модуль Encode, что напрямую рекомендуют в документации
> print Encode::encode_utf8($template->output);

И еще пару лет прошло...
Чтобы убрать ворнинги "Use of wide characters in FCGI::Stream::PRINT" использую Encode::encode_utf8( $content )