* DENX-COUNTER :WEBページ用のシンプルなアクセスカウンター 必ずお読みください。 ========================================= 使用前に必ずしなければならないこと ----------------------------------------- * この文章の末尾付近にある「ライセンスについて」と、別紙 LICENSE.txt を読んでください。 * config.pl に目を通し、自分の環境に合わせて設定を変更してください。なるべく分かりやすいよう、 コメントをたくさん入れてあります。 * denxcount.cgi の一番最初にある #!/usr/bin/perl を、サーバの perl 実行バイナリのパスと一致するよう に合わせてください (#!/usr/local/bin/perl など)。 ファイル構成 ----------------------------------------- セットに含まれる空のディレクトリ dat, lock は、サーバへの配置をイメージしやすいように作ってありま す。このフォルダ「自体」をアップロードする必要はありません。同名のフォルダをサーバ上に新規に作成 すれば問題ありません。 denxcount.cgi スクリプト本体 config.pl 設定ファイル dat/ カウント値記録ファイルを保持するディレクトリ (配布時はカラ) lock/ 同時書き込み防止用のロックファイルが作成されるディレクトリ (配布時はカラ) testhtml/ + countertest.html カウンタを掲載するページへの JavaScript記述サンプル README.txt 今読んでいるこのファイル LICENSE.txt ライセンスについて GPL.txt GNU General Public License(GNU一般公衆利用許諾契約書) .cgi, .pl ファイルは、文字コードEUC-JP, 改行コードLF になっています。都合でShift-Jis等に変更する 場合には、denxcount.cgi と config.pl 両方を同一の文字コードにしましょう。UTF-8 にも対応しています。 編集には、EUC文字コード及び LF改行コードが正しく処理できるテキストエディタを使ってください (フリ ーソフトでは TeraPad, シェアウェアでは秀丸あたりが有名です)。 サーバへのファイル配置 ----------------------------------------- 下記のファイル構造をサーバ上に作成してください。パーミションは以下(カッコ内はシンボル形式での表示)。 WEBサーバが suxec されている場合は、グループビットは 0 (---) で構いません。 親ディレクトリ 755 (rwxr-xr-x) denxcount.cgi 755 (rwxr-xr-x) config.pl 644 (rw-r--r--) dat/ 777 (rwxrwxrwx) か suexecでない場合は可能なら 2777 (rwxrwsrwx) lock/ 777 (rwxrwxrwx) か suexecでない場合は可能なら 2777 (rwxrwsrwx) カウンタを掲載するページ自体の編集 ----------------------------------------- DENX-COUNTER は、クライアントからのリクエストに応じて、カウンタ値を JavaScriptの変数定義文として 返します。カウンタを掲載するHTMLページに、countertest.html を参考にして JavaScriptコードを追加して ください。 なお、返ってくる JavaScript変数は連想配列であるため、ひとつのHTMLページで複数のカウンタを同時に表示 することも可能です。 * デバグに役立つ情報 (やや上級者向け) 設定ファイルの @must_referer を 空配列にすると、denxcount.cgi をブラウザから直接コールでき、CGIの返してくる文字列が確認できます。 カウントdatファイルが開けない、ロックに失敗した、など、CGIの実行で問題が起こった場合、denxcount.cgi は JavaScript の配列エレメント errors[''] (はリクエストされたdat定義名) に英文のエラーメ ッセージを乗せて返します。ただし、リクエストで datが指定されなかった場合や、Referer規制違反( config.pl参照)だった場合には、dat名を取得する努力は無駄なので、代わりに単純変数 error にメッセージ を乗せて返してきます。 リクエストのオプション引数による denxcount.cgiの動作制御 --------------------------------------------------------- denxcount.cgi には、ひとつの必須引数と、省略可能な3つのオプション引数があります。 *必須 dat=dat定義名 には、カウントを保持するファイルの定義名を指定します。例えば "denxcount.cgi?dat=test" というリクエストを受け取ると、./dat/test.dat というファイルにカウントを書き込み(または読み込み) を行おうとします。 *省略可能 sh=no これが指定されたリクエストに対しては、HTTPヘッダだけ返し、カウント値は返しません。カウントアップ 専用の隠しカウンタを設置する場合に適しています。指定されなかった時のデフォルトは sh=yes です。 incr=no カウントアップしません。隠しカウンタの集計結果を表示するためのページに適しています。デフォルト動 作は incr=yes です。 sty=no config.pl で $count_face など文字修飾関係の設定がされていても、リクエスト自体で sty=no オプショ ンが指定されていると、文字修飾の設定がひとつもされていない時と同様に修飾なしのカウント値を返し ます。デフォルト動作は sty=yes です。 参考までに ----------- 「ファイル配置」の通りにファイルを配置しても動かない場合、UNIX (Linux) の知識が多少なりとも必要で す。WEBサーバやディレクトリ環境の設定 (.htaccess によるも設定も含む) が可能な場合、以下の点を検討す ると良いでしょう。ここでは Apache に関してのみ触れます。IIS は私は知りません。 * ファイルをサーバへアップロードする際に、ASCII(テキスト)モードと bin(バイナリ)モードを切り替えてみ てください。あらかじめ希望の文字コードでファイルを保存しておいてから binモードで送るのが、一番確実 なアップロード方法です。 * WEBサーバの当該ディレクトリの設定が、CGI-Perl の実行可能な状態になっているか。レンタルサーバや、 独自CGIの利用を許可しているプロバイダの場合、管理者の指定しているディレクトリ内 (cgi-bin/ など) に 置かないと動かない場合が多いでしょう。そうした指定ディレクトリが特にないか、サーバの設定が自由にな る環境の人は、下記の Apache設定句で CGI-Perl の動作が可能になります。下記 2行目以外の定義は、通常は サーバのグローバル設定ファイルで設定されているので、DENX-COUNTER を置くディレクトリ自体には特に設定 する必要はないでしょう: PerlHandler Apache::Registry Options +ExecCGI AddHandler cgi-script .cgi * ドキュメントルートとなっているディレクトリ (UserDir の場合は自分のホームディレクトリ) から DENX-COUNTER のファイル群が置いてあるディレクトリまで至るすべての階層が、WEBサーバデーモンに読める パーミションになっているか。通常、それらディレクトリは 701 (rwx-----x) かそれより緩いパーミションで ないと、WEBサーバが中のファイルを読んだり実行したりできません。 * 動作しているようだが文字が化けしている場合: サーバが意図と異なるHTTPヘッダを付けて内容を送り出している可能性が高いです。当スクリプトの出力は、 基本的には charset=us-ascii とした HTTPヘッダを付けて出力されますが、config.pl で $use_jp を設定し た場合には、denxcount.cgi ファイル自体の文字コードを検出して、それを charset= に反映して送り出しま す。これは、DENX-COUNTER の置いてあるディレクトリに下記の Apache 設定句を設定することで解決できる場 合があります。下記の例は denxcount.cgi と config.pl ファイルを shift_jisで保存した場合です。ただし 1行目の "DefaultLanguage ja" 通常は必要ないでしょう。: DefaultLanguage ja AddDefaultCharset shift_jis * ちょっとしたセキュリティ DENX-COUNTER を格納しているディレクトリで .cgi ファイルが CGI-Perl として実行されるようになっていれ ば、.cgi ファイルは「実行」されるのみで、スクリプトの中身の記述をクライアントに直接見られることはあ りません。しかし、カウント値を保持する .dat ファイルは、見ようとすれば見られてしまいます。.dat には カウントが書いてあるだけなので特に問題はありませんが、見られたくない場合には、例えば以下の Apache 設定句によって見られないようにできます。 Order allow,deny Deny from all 上記の諸設定について、より詳しく知りたい方は、WEBサーバ Apache のオフィシャル解説 (http://httpd.apache.org/docs-2.0/) を読むと良いでしょう。 ライセンスについて ----------------------------------------- DENX-COUNTER :A simple access counter for WEB pages Copyright(C) 2007 Stray Penguin (Tatsuya Nonogaki) http://www.asahi-net.or.jp/~aa4t-nngk/ All Rights Reserved. このプログラムは完全に無保証です。 利用規定はGNU General Public License(GNU一般公衆利用許諾契約書)に 準じます。 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ----------------------------------------- それではお楽しみください。 履歴 ----------------------------------------- 1.0.9 <--1.0.8 :2007/5/10 *flockによるファイルロックのパラメータをLOCK_EX(2)からLOCK_EX|LOCK_NB(2|4)に修正。 1.0.8 <--1.0.7 :2007/5/6 *雑多なコードクリーニング。 1.0.7 <--1.0.6 :2007/4/30 *文字修飾にclass属性を追加。 *style修飾文字列の生成をファンクションへ分離(build_style)。 1.0.6 <--1.0.5 :2007/4/30 *カウントアップ間隔($interval)の設定が0の時にはCookieを発行しないようにした。 *Cookieが得られなかった時にダミーとして使用する前回参照時間の変更。 *HTML記述サンプルのおまけ「合計表示スクリプト」を、sty=noでなくても機能するよう改良。 1.0.5 :2007/4/29 初公開