wl-enqで各種トラブル(解決)

会社の仕事で(全然その関連部署でもナンでもないのに)アンケート集計のようなことをやらされかねない状況に陥っています。
今のところのらりくらりと逃げ回っていますが、そんな中サーバのCGIでアンケートを集計するという環境にちょっと興味もあったりして、こっそりアンケートフォームを検索してみました。

そこで見つけたのが、wl-enqというスクリプトアンケートに限らず、各種スクリプトが無償で公開されていて、ありがたいの一言に尽きます。これは先の前回の書き込みでもURLを忘れないように書き留めておきました。

簡単にREAD.MEに目を通し、ひとまず設置してみます。PERLでGCIなので、CGI-BINディレクトリにwl-enqディレクトリを作成してそこに放り込み、READ.MEの指示通り各ファイル・ディレクトリのパーミッションを変更します。

ところが、何度やってもInternal Errorが。error.logを見ると、どうもno such file or directory exec of ・・・となっていて、CGI本体が実行できていないようです。もちろんサーバへのアップロードは問題なく行えています。
なんでだろう・・・?と悩むことしばらく。何気なくサーバ上にアップした本体ファイルをlessしてみたところ、バイナリだけど表示する?と尋ねられてしまいました。ローカルで確認したときはちゃんとテキストでしたから、バイナリになっているはずはない・・・。(;゜〇゜)もしかして、ローカルでは面倒くさがってGEDITで見ていたから気が付かなかったのかも。これって、文字コードがダメだからなんじゃ?

ということで、アップロードしたすべてのファイルをまずはUTF-8に変更します。
文字コードの変換にはnkfコマンドを使います(無いときはYUMしましょう)。オプションはmanしてもらうとして、ディレクトリ内のすべてのファイルをUTF-8に変換するには、

nkf -w –overwrite *

とします。-wがUTF-8指定、–overwriteが上書き指定です。
再帰的に処理しませんので、サブディレクトリ内のファイルに対してはそこまで下りて同じ処理をします。すべてのファイルを処理し終えたら、lessで確認。きちんと表示されればOKです。

これで行けるかと思いきや!?

やっぱりInternal Errorが返されます。そこでこれまた色々調べてみたところ、本体のPERLへのパス記述で、/usr/bin/perlなどとなっていても、このperlの後に–をつけないとうまくいかないこともある(理由はよく分からない)という情報が。
なのでうちでも
/usr/bin/perl → /usr/bin/perl —
に変更してみました。ダメもとでやってみたのですが、これがなんと大当たり!無事最初のLOGIN画面が現れました。ナイス!

しかしここからまた新たな問題が。ブラウザの表示が(ほとんどすべて)文字化けしてしまうのです。要素によっては化けてないところもあるのですが、基本すべて化けています。
ブラウザの「表示」がShift-JISになっているので、これをUTF-8にすると文字化けが解消されます。
(※nkfコマンドで、htmlファイルをUTF-8にしていないとhtmlに書かれている部分はShift-JISでも文字化けしなかったが、すべてUTF-8に変更したらきちんと?すべて文字化けするようになった)

表示しているのはHTML部分なのですから、各HTMLファイルにUTF-8指定を理解させればいいはず。ということで一番最初のLOGIN画面を表示するLOGIN.htmlというファイルに

<META https-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

というメタタグを埋め込んでみました。これでブラウザはこのHTMLを開く際に、UTF-8で表示してくれるはず・・・だったのですが、文字化けは解消しません。
手動でブラウザの表示をUTF-8に変更すれば文字化けは解消されることから(そして標準のままではShift-JISになっていることから)、どうもこのメタタグが有効に機能していない模様。
これまたいろいろ調べてみると、httpsのヘッダがShift-JIS指定になっていると、メタタグよりもそちらが優先される・・・みたいな情報が。しかしhttpsのヘッダなんてどうやって調べれば・・・?

と、考えました。LOGINフォームも含めて、その処理の中心はwl-enq本体であるenq.cgiなんじゃないかと。そこでenq.cgiをlessして覗いてみると・・・。

$https_HEADER_CONTENT_TYPE = “Content-type: text/html; charset=Shift-JIS\n\n”;

という一文が(最初の方に)ありました!なるほど、httpsのヘッダとしてShift-JISが指定されている!

これを

$https_HEADER_CONTENT_TYPE = “Content-type: text/html; charset=UTF-8\n\n”;

に変更したところ、これまでさんざん文字化けしていたHTMLが嘘のようにきれいに日本語で表示されるようになりました!

Windows環境じゃないといろんなところでよけいな(?)苦労をすることになりますが、こうやって(些細なことでも)一つずつ解決していけるというのはうれしいものです。

後はアンケートフォームの中身を作って、集計のテストをしてみなくちゃ、ね。

boota

いろんなモノに、いろんな意味で、ヲタ。なのかも?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)