MENU

溶けかけてるうさぎ HP GALLERY BLOG TOP RECENT ARTICLES POPULAR ARTICLES ABOUT THIS BLOG

CATEGORY

大学 (140) 仕事 (17) 航空宇宙 (104) 写真 (77) 旅行 (32) 飯・酒 (17) コンピュータ (118) その他 (44)

TAG

ARCHIVE

RECENT

【カメラ】X100 シリーズが好きすぎる(主にリーフシャッタ) 【カメラ】X100V から X100VI に買い替えました 【自宅サーバー】Google Domains から Cloudflare にドメインを移管 【カメラ】FUJIFILM XF レンズのサイズ比較ができるようにしてみた 【写真】自作写真閲覧ページにてフィルムシミュレーションで写真をフィルタできるようにした

【Apache】cgiエラー Wide character in print at ...pl in line ...

事象発生日:2017-08-02

記事公開日:-

アクセス数:6255

久しぶりにApachのエラーログ(error.log)を眺めていたら,ものすごい数のWide character in print at ...エラーが発生していた.

これを回避する方法を記録する.

 

トップ画像の出典はこちら

1.動作環境

Ubuntu Server 16.04.2 LTS

Apache HTTP Server 2.4.18 (Ubuntu)

perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux-gnu-thread-multi

2.Apacheエラーログ

Apacheエラーログ(error.log)を確認すると,下のようにエラーが出ているのがわかる.

なお,エラーが出ているのにもかかわらず,500 Internal Server Errorは出ない.

 

これが1アクセスされるたびに複数(おそらくprintされるたび)に出るため,error.logが肥大化(~ 1000 MB)していた.

[Wed Aug 02 16:28:22.545634 2017] [cgi:error] [pid ${pid}:tid ${tid}] [client ${ip}:${port}] ${?}: Wide character in print at ${cgi-path} line ${line-no}.: ${cgi-path}, referer: ${referer}
error.log

なんで今まで気づかなかったんだろうか....

まあ,エラーログなんて問題が起きない限り見ないしね.

3.原因と解決策

原因は簡単で,flagged UTF-8(つまりUTF-8のPerl内部表現)になっていたためだ.

そこで以下のように6行目の binmode STDOUT, ':utf8'; を追加すれば良い.

文字コード周りは,が参考になる.

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
binmode STDOUT, ':utf8';
修正コード

そういえば,Windowsで書く時は,下のように書くのは常識ですよね.

DOS窓はcp932というゴミしか扱えないので....(まあ,chcpコマンドで出力文字コードを変えることもできるけど,レイアウトがね....)

unixだったら,文字コード周りうまくやってくれるでしょ,っていう考えは甘かったようです.

use strict;
use warnings;
use utf8;
binmode STDIN,  ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';
WindowsでのPerlソースコード

4.最後に

というか,なんでエラーが出ているのに,500 Internal Server Errorは出ないし,出力も化けないんですかね....

理由がわからない.まだまだPerlの理解が足りていないようだ.

5.参考・出典サイト

ja.wikibooks.org. Perl/日本語処理. Retrieved August 2, 2017, from https://ja.wikibooks.org/wiki/Perl/日本語処理
VOYAGE GROUP エンジニアブログ. あなたにも今日こそPerlの文字化けが理解できるたった一つの原則. Retrieved August 2, 2017, from http://tech.voyagegroup.com/archives/465806.html

コメントを投稿

名前

Email (※公開されることはありません)

コメント