SSブログ

「apache」でカウンターを動かす。 [Apache]

「apache」でカウンターを動かす。

■CGIで動かすカウンターを用意する。

       
[bibo-roku@centos Downloads]$ wget -O dream.zip http://www.kent-web.com/cgi/downld/downld.cgi?id=dream ←名前付きダウンロード。

[bibo-roku@centos Downloads]$ unzip dream.zip ←解凍。

[bibo-roku@centos Downloads]$ sudo mv dream/ /var/www/html/ ←ディレクトリ移動。

[bibo-roku@centos html]$ chmod 705 dream/ ←パーミッション変更。
[bibo-roku@centos dream]$ chmod 705 dream.cgi 
[bibo-roku@centos dream]$ chmod 705 admin.cgi 
[bibo-roku@centos dream]$ chmod 705 check.cgi 
[bibo-roku@centos dream]$ chmod 604 init.cgi
[bibo-roku@centos dream]$ chmod 604 lib ←間違い。
[bibo-roku@centos lib]$ chmod 604 gifcat.pl 
[bibo-roku@centos lib]$ chmod 604 magick.pl
[bibo-roku@centos dream]$ chmod 707 data
[bibo-roku@centos data]$ chmod 606 index.dat
 
[bibo-roku@centos html]$ sudo chown -R apache:apace dream/ ←所有者変更。
 
[bibo-roku@centos dream]$ vi init.cgi ←変更。

$cf{password} = '0123'; ←原文。
$cf{password} = 'bibo-roku'; ←変更後。

$cf{ip_chk} = 0; ←原文。
$cf{ip_chk} = 1; ←変更後。

[bibo-roku@centos dream]$ sudo /etc/init.d/httpd restart ←「apache」再起動。

http://192.168.0.66/dream/check.cgi ←「チェックモード」アクセス。
Internal Server Error

[bibo-roku@centos dream]$ vi check.cgi
:set fileformat? ←ファイルのフォーマット調査。
  fileformat=dos ←「DOS」
:set fileencoding? ←ファイルのエンコーディング調査。  
  fileencoding=latin1 ←「latin1」

***********************下記 禁止事項***********************
:set fileformat=unix ←変更後。
:set fileencoding=utf-8 ←変更後。
***********************上記 禁止事項***********************

[bibo-roku@centos ~]$ sudo yum install nkf ←文字、改行コード変更に。
インストール:
  nkf.i686 1:2.0.8b-6.2.el6                                             
完了しました!

[bibo-roku@centos dream]$ sudo nkf -s -Lu --overwrite check.cgi ←文字、改行コード変更。「-s」でShift-JISに。
[bibo-roku@centos dream]$ sudo nkf -s -Lu --overwrite admin.cgi 
[bibo-roku@centos dream]$ sudo nkf -s -Lu --overwrite dream.cgi 
[bibo-roku@centos dream]$ sudo nkf -s -Lu --overwrite init.cgi

http://192.168.0.66/dream/check.cgi ←GOOD

http://192.168.0.66/dream/admin.cgi ←NG
「Internal Server Error」

[bibo-roku@centos dream]$ sudo yum install perl-CGI ←不足分。
インストール:
  perl-CGI.i686 0:3.51-136.el6_6.1                                               
完了しました!

http://192.168.0.66/dream/admin.cgi ←GOOD

http://192.168.0.66/index.html ←テキストのみ表示、カウンターNG

[root@centos dream]# ls -l
---省略---
drw----r--. 2 apache apache 4096  8月 17 13:02 2008 lib ←パーミッション「604」

[root@centos dream]# chmod 707 lib ←パーミッション変更。
[root@centos dream]# ls -l
---省略---
drwx---rwx. 2 apache apache 4096  8月 17 13:02 2008 lib ←「707」に。

       
      
「CGI」と言えば「カウンター」だなぁと10年以上前のホームページ全盛の頃を思い出しますね。というわけで、設置が一番簡単そうかなと思いカウンターを選びました。
 インターネットで検索し以下のサイト様のカウンターを使わせていただくことにしました。ありがとうございました。

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」などに変更してカウンターが表示されるようになりました!

 このレベルで長時間苦しんで情けない限りです。が、基本的には「パーミッション」「所有権」「モジュールの不足」がトラブルの原因だった。ということを知れたのは収穫でした。次回に生かせると尚良いのだけれど。



この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。