「apache」でカウンターを動かす。 [Apache]
■CGIで動かすカウンターを用意する。
|
インターネットで検索し以下のサイト様のカウンターを使わせていただくことにしました。ありがとうございました。
http://www.kent-web.com/count/dream.html
まずはダウンロードしましたが、「wget」コマンドで少し手間取ってしまいました。
「wget http://www.kent-web.com/cgi/downld/downld.cgi?id=dream」を実施するとダインロードされるファイルは「downld.cgi?id=dream」となってしまっています。
確認もせずに捨てていましたが、実はこれがファイルでした……。これを「mv」コマンドで変名しても良いのでしょうが、「-O」オプションを付けて初めからファイル名を付けることが出来ました。
次にファイルを「unzip」コマンドで解凍し出来上がった「dream」ディレクトリを説明にあるとおり「public_html」に設置します。
といっても、「public_html」というディレクトリはありません。調べてみると、
レンタルサーバーでホームページファイルをアップロードする場所は、ファイルマネージャーの「public_html」というフォルダになります。
また、この「public_html」は「www」のフォルダとなっていることもあります。
とのこと。つまり文字通りの意味で、公開するHTMLファイルを入れるディレクトリで一番浅いディレクトリというところでしょうかね。当方の場合は「html」でしょう。
ダウンロードして解凍したディレクトリを指定の場所に設置し、各ファイルの所有権を指定通りに設定します。
※当方は今回間違って変更している部分があります。後半で気がつき修正しています。
次に各「cgi」ファイルに「#!/usr/local/bin/perl」を記入(当方と同じだったので変更無し)するためにファイルを「vi」コマンドで開いたのですが、英数字文字以外は全部文字化けしておりコメントアウトしてある説明文は全く読めません。
しかし、いじるところは英数字のところばかりなので問題なく変更。
「apache」を再起動し、説明にあるとおりブラウザでチェックモードの「check.cgi」に直接アクセスするも「Internal Server Error」発生。
「パーミッション」を「755」にするも変化なし。
先日調べた「Internal Server Error」発生の原因リストには、
1.ディレクトリのパーミッション
2.CGI ファイルのパーミッション
3.Perl のパスの違い
4.改行コード
5.UTF-8 の BOMコード
6.文法エラー
7.「モジュール」の不足
8..htaccess の問題
9.Perl のバージョン
これらがあるようなので、当てはまるところを修正していきます。
問題なさそう→1.3.6.9
問題ありそう→4
わからない→5.7.8
ということで、改行コードについて調べてみました。
Unix=LF
Windows=CR+LF
Mac=CR
うーん。よく見かける情報ですが、コピペとか手動でいい加減に修正して其の場凌ぎで対処してきたから全然わかりませんねぇ。
でもまぁつまり「check.cgi」の現状の改行コードを調べて、それが「Unix(CentOS)」用の「LF」であれば良いと言うことですよね。
現状の改行コードを調べてみます。
「vi」コマンドで「check.cgi」を開き、「set fileformat?」とついでに「set fileencoding?」コマンドで調べてみると「fileformat=dos」と「fileencoding=latin1」表示されました。
これはつまりWindowsで「CR+LF」ということですよね。なるほど、こりゃだめです。
***********************下記 禁止事項***********************
ならば、改行コードを「LF」にエンコーディングを「utf-8」にしてやれば良いはずです。
変更後、「apache」を再起動して再度アクセスするも「Internal Server Error」発生。
実はここではまりました。
「vi」コマンドで「set:fileformat=unix」を実施したところ、「check.cgi」にブラウザで直接アクセスしたところ、文字化けは起こすものの「Internal Server Error」が出なくなりました。
じゃぁ、あとは文字化けだけだと、「set:fileencoding=utf-8」を初め色々変えてみたのですが、文字化けは直りません。
調べを進めたところ「nkf」コマンドという文字コートや改行コードを変換してくれるコマンドが存在しました。
「vi」で上手くいかないので「nkf」で変換したところ、やはり文字化けは直りませんでした。
仕方ないので、最初からやり直そうとスナップショットを遡って今度はまず「nkf」コマンドで改行コードと文字コードを変更しました。
「nkf -w -Lu --overwrite check.cgi」そして「apache」を再起動させアクセスすると問題なく動いてくれました。文字化けも直っていました。
その後「vi」のコマンドも使用してみたのですが、はじめに「vi」で「set:fileencoding=」を行ってしまうと、あとで「nkf」を使っても文字化けが直らない現象が起きることが解りました。(多分ですが。自分の環境だけかも。)
つまり、「vi」コマンドでは文字、改行コードは変更せず「nkf」コマンドだけインストールして変更してやれば良いことになります。
大変時間をかけてしまいました。
---追記--- 「vi」の「set: fileformat=unix」は有効でした。実行することにより「Internal Server Error」がなくなり文字化けではあるけど正しいページが表示されます。
次に「文字コード」を直そうと「set:fileencoding=utf-8」を使用するのが間違いとわかりました。(utf-8以外でもだめ)
「文字コード」の修正には「nkf -w --overwrite check.cgi」とします。その前に「set:fileencoding=utf-8」を実行してしまうと。「nkf -w --overwrite check.cgi」が効かなくなってしまうので注意です。(当方の場合では)
改行コード変更=「vi set:fileformat=unix」と「nkf -Lu --overwrite」有効
文字コード変更=「nkf -w --overwrite」有効
「vi」と「nkf」どちらも「改行」「文字」コードをいっぺんに変更できますが、1つずつ変更すると不具合の場合の原因が特定しやすくなると思います。
当方の理解度が低いための現象かも知れませんので悪しからず。
***********************上記 禁止事項***********************
次に「admin.cgi」を自信を持ってアクセスしたのですが、「Internal Server Error」でした。
サイトを巡りまくってようやく「perl-CGI」というモジュールが「掲示板」などのCGIに必要だという記述を見つけました。そして一応入れてみることにして、たまたま解決することができました。まだまだ駄目ですねぇ。
最後にHTMLファイルにカウンターを設置しちゃんと動作するか確認すべく、HTMLファイルに「<img src="dream/dream.cgi?id=index">」を記述し、「apache」の再起動後アクセスするも、テキストは表示されるもののカウンターは表示されず。
「admin.cgi」「check.cgi」という直接接続するCGIには問題なく接続ができるようになったので、気楽に構えていたのですがこれまたはまってしまいました。
結局はパーミッションの問題でした。しかも完全に自分が行った設定が間違いでした。 ディレクトリ「lib」がパーミッション「604」になっていたのです。(今回のびぼーろくの初めにちゃんと間違いが残っている!) 他のパーミッション変更と流れ作業的に行ったのが敗因ですね。お恥ずかしい限りです。
でこれを「707」とか「755」などに変更してカウンターが表示されるようになりました!
このレベルで長時間苦しんで情けない限りです。が、基本的には「パーミッション」「所有権」「モジュールの不足」がトラブルの原因だった。ということを知れたのは収穫でした。次回に生かせると尚良いのだけれど。