さくらインターネットで開発中WEB経由でCGIが正常に動かない場合の検証

2017年7月1日

やっとMecab.pmが動いたと思ったのも束の間・・・

ターミナル上での実行は正常でも
CGIとしてブラウザからアクセスすると文字化けしまくる、という状況でした。

こういうときはひとつづつ潰していくのが良いと思います。

mecabの実行結果はどうなってる?

コマンドラインとブラウザ経由と吐き出す出力を比べるにはテキストファイルに出してみると良いです。

 

#!/usr/bin/perl
use strict;
use warnings;
use MeCab;
my $m = new MeCab::Tagger ("");
my $n = $m->parseToNode ("将来の話をしようじゃないか.");
my $debug;
while ($n = $n->{next}) {
    $debug .= "$n->{surface} $n->{feature} $n->{cost}\n";
}

# debug用の出力
open OUT,">/home/****/www/kyokigo/debug.txt";
print OUT $debug;
close OUT;

# HTMLの表示
print "Content-type: text/html\n\n";
print "<html lang=\"ja\">\n";
print "<head>\n";
print " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
print " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.
0, maximum-scale=1.0, user-scalable=0\">\n";
print " <meta http-equiv=\"Pragma\" content=\"no-cache\" />\n";
print " <meta http-equiv=\"cache-control\" content=\"no-cache\" />\n";
print " <meta http-equiv=\"expires\" content=\"0\" />\n";
print " <link rel=\"apple-touch-icon-precomposed\" href=\"\" />\n";
print " <title>TEST</title>\n";
print "</head>\n";
print "<body>\n";
print "Ready.\n";
print "</body>\n";
print "</html>\n";

 

CGIとしても動かすために、後半にはシンプルなHTMLを書いています
(Ready.と表示するだけ)
出力結果を$debugに代入して、
ファイルをフルパスで指定して書き込んでいます。

 

ターミナルで実行した場合はこのような結果になりました。

将来 名詞,副詞可能,*,*,*,*,将来,ショウライ,ショーライ,, 3644
の 助詞,連体化,*,*,*,*,の,ノ,ノ,, 4286
話 名詞,サ変接続,*,*,*,*,話,ハナシ,ハナシ,, 7266
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,, 6790
しよ 動詞,自立,*,*,サ変・スル,未然ウ接続,する,シヨ,シヨ,, 9169
う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ,, 7777
じゃ 助詞,副助詞,*,*,*,*,じゃ,ジャ,ジャ,, 10731
ない 助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ,, 11857
か 助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ,, 11413
. 記号,句点,*,*,*,*,.,.,.,, 8953
 BOS/EOS,*,*,*,*,*,*,*,* 8351

 

しかし、CGIとして実行した場合はこのような出力となりました。

絨 ?詞,一般,*,*,*,*,* 11143
来 禝Ⅴ罨一般,*,*,*,*,* 14562
・ ?詞,一般,*,*,*,*,* 25298
・ ?詞,サ変接続,*,*,*,*,* 42326
をしようじゃ 禝Ⅴ罨一般,*,*,*,*,* 45723
・ ?詞,固有名詞,組織,*,*,*,* 57685
か. 記号,一般,*,*,*,*,* 61031
 BOS/EOS,*,*,*,*,*,*,*,* 59294

 

結果が全然違います!
これは実行方法によって結果が変化してしまうことを示しています。

次回はもう少し確認してみましょう。