opqr.info アフィリエイト,アクセスアップ,相互リンク,ロボット一括登録,検索エンジン最適化,ホームページ作成など、初級から中級のWebマスター必見!
インターネット有効活用術
[アフィリエイト] [アクセスアップ] [相互リンク] [ロボットSE推薦] [懸賞] [銀行/証券] [ブログ] [ビジネス] [ランキング] [無料サーバー]
[検索エンジン] [サーバー] [カラーチャート] [携帯検索エンジン登録] [荒らし] [リンクフリー] [作品] [洗った] [ダウンロード] [掲示板]
[CGIカウンター] [PHPカウンター] [PHP環境] [言語] [CGI] [クッキー] [JAVA] [javascript] [VB] [リンク] [開発BBS]


【CGI アクセスカウンタ】

【かうんたーCGIのソース(Perl言語)】

//-----------------------------------------------------------

#!/usr/local/bin/perl

################################################################################
# ■CGIにプログラムの読み方の豆知識
# ・行頭の『#!/usr/local/bin/perl』はUnixマシン以外では無視されます。
# ・変数に関しては宣言文が不要。『 = YYY』で代入を行う。
# ・『./』は同一ディレクトリ。
# ・『 』は改行を示す。
# ・『+<
# ・『localtime(time)』は時間を『秒分時 日月年』の並びで『現地時間』で取得するの意。
# ・年の起点…『1900年』
# ・月の起点…『0』…が『1月』を意味する。
# ・コメント以外の行の最後には『;』が必ず必要。
# ・『ne』は『<>』と同意。
# ・『#』はコメントの意。
# ・『""』と『''』は文字列を表す。
# ・プロシジャーは『{}』で囲まれた部分単位。
# ・『&サブルーチン名;』でファンクションの呼び出し。
# ・『&』の読み方は…アンパサント
# ・サブルーチンの構成…『sub サブルーチン名 { Perl文 }』
# ・Perl言語ではパラメーターがないときは『()』を省略できる。
# ・『++』で変数に1加えるの意。
# ・『 += 増減値』加算して代入の意。
# ・『<<』ヒア文字列機能の記号。(解説;H)
# ・配列の書き方…『 [0から始まる添え字]』
# ・『=~』…パターンマッチ演算子(曖昧検索と同様)。
# ・『*』
# ・『eval』
# ・『!』

# ■構文
# ・『for (変数 = 初期値; 継続条件 ;増減値)』
################################################################################
################################################ A
###■設定部分
### カウンタファイル名(.datと同じ)
= "./cntcgi.cnt";

### HTMLファイル名(特殊タグ<CNTtag>の入ったもの)
= "./cntcgi.html";

### 置き変えされる特殊タグ名
= '<CNTtag>';

### ロック関連。# ロックを使うなら1。うまく動かないとき0にする。
= 1;

################################################ B
###■HTTPヘッダ部分
###" "でヘッダ部分の終了を認識させる。
print "content-type: text/html ";
print " ";

################################################ C
###■データ・カウンタファイルのオープン
###『show_page』はサブルーチン名。
###『OUT』というファイルハンドルにオープンされたファイルデータを格納。
if (!open(OUT, "+<")) {
= '[not found]';
&show_page;
exit(0);
}

################################################ D
###■ファイルのロック
###『lock_file』はサブルーチン名。
if (!&lock_file(OUT)) {
= '[lock error]';
&show_page;
exit(0);
}

################################################ E
###■カウンタ値の取得
###『seek』でファイルの先頭に移動(rec.movefirstと同じ)。
###『OUT』のデータを一行ずつ読み込み
seek(OUT, 0, 0);
= 1 + ;
= 0 + ;
= 1 + ;
= ;

################################################ F
###■年月日の取得
( , , , , , ) = localtime(time);
###月は『0』が1月なので、表示用に1を加える。
++;
###年の起点が1900なので、表示用にその数値を加える。
+= 1900;
###年月日の並びに整形。
= "-- ";

################################################ G
###■初めてのアクセスかどうかの判断
###上で整形した『today』とカウンタファイルの4行目に入っている『lastday』の比較。
if ( ne ) {
( , , , , , ) = localtime(time - 24*60*60);
++;
+= 1900;
= "-= ";
if ( ne ) {
###昨日のアクセスは0件
= 0;
} else {
###昨日のカウンタファイルのtodaycnt-1をyesterdaycntに入れる。
###『todaycnt』はすでにEで1加算されているので、それを除算する。
= - 1;
}
= 1;
= ;
}

################################################ H
###■ファイルのカウンタ値の更新
seek(OUT, 0, 0);
print OUT " ";
print OUT " ";
print OUT " ";
print OUT "";
&unlock_file(OUT);
close(OUT);

################################################ H
###■HTMLへの表示
###『<<』ヒア文字列機能の記号。
###通常の文字列表記の前に『<<』が付くと、次行から
###印譜(ここではend_msg)が出てくるまでの文字が二重引用符("")の中に収まる。
###ここでは豆知識にあった『行の最後には『;』が必ず必要』は適用されない。
= <<"end_msg";
昨日は 回。 
今日は 回。 
通算 回のアクセスがありました。<br>
今日の日付は です。
end_msg
&show_page;
###終了
exit(0);

#############################################################################
## (ここから下はサブルーチン) ###############################################
#############################################################################

################################################ I(sub)
###■サブルーチン:&show_page
###『@html = ;』でHTMLファイルの内容を配列『@html』に読み込みます。
###配列の要素は行数に相当。
sub show_page {
###HTMLファイルの読み込み
if (!open(HTML, "")) {
print "<html><H1><H1></html> ";
exit(0);
}
@html = ;
close(HTML);

###HTMLファイルの読み込み
###『for (変数 = 初期値; 継続条件 ;増減値)』
###『 < @html;』の時の@htmlは要素の数。つまり『@html = 行数』。html文のテキストではないので注意。
###スカラーコンテキスト
###『=~』…パターンマッチ演算子(曖昧検索と同様)。
###if文は『もし文字中に該当文字()を見つけたら()と置き換える』という内容。
###『s/置き換え前の文字列/置き換え後の文字列/gi』
###s…置換(substitute), g…全体(global), i…無視(ignore)
for ( = 0; < @html; ++) {
if ( =~ //i) {
=~ s///gi;
}
print ;
}
}

################################################ J(sub)
###■サブルーチン:&lock_file
sub lock_file {
local(*FILE) = @_;
if () {
eval("flock(FILE, 2)"); # 2=LOCK_EX
if ($@) {
###flockが使えない時
return 0;
}
}
return 1;
}

################################################ K(sub)
###■サブルーチン:&unlock_file
sub unlock_file {
local(*FILE) = @_;
if () {
eval("flock(FILE, 8)"); # 8=LOCK_UN
}
}

//-----------------------------------------------------------



■以上がソースコードです。

Perlの記述自体はどんなOSでも作成可能なようですが、僕の場合はWindows環境で作業しています。そのため上記のコードがどんなOSでも通用するかは明確には言えませんが、基本的にはOKなはずです。

【上記CGIの動作に必要なファイル】
1.cntcgi.html
2.cntcgi.cnt
3.cntcgi.cgi

※ちなみに上記のソースはあくまでも学習の参照用に公開しています。もし仮にトラブルが発生したり、 何らかの影響がOSやサーバー等に発生したとしても私の方では責任は負いかねますのでご了承ください。

※また本プログラムの設計構成に関しましては結城浩様のものであり、著作権も結城浩様に属します。


【お勧めの書籍・独り言】
僕がこのようなサイトを運営している背景に、当然僕の仕事が『開発』であるという前提があります。 (サイトの内容があまり細かくないのは、個人的にこれをやっている時間があまり取れないためです。時間をくれ!…って感じ)
Webの作成から始まり、Visual Basic、JAVA、CGI、Java-script、PHPなどを使った業務系の開発をしてます。
なんでそんなにたくさんの言語を…と、思うかもしれませんが、最近の業務系アプリの主流はユーザーが ストレスを感じない使い勝手の良いプログラムの作成です。ユーザーに専門的な知識を要求しない アプリを作成しようと思うとやはり『ブラウザ』をベースにした作りがいいわけです。(あくまでも私見)
そんな私が『プログラムの知識を広げよう、ヒントを得たい』と思った時に、例えば書店やWebサイトを 覗いてみると、世間に出回っている書籍やサイトはやはりちょっと物足りない、ある種わかりきっている 入門書やWeb向けの開発ヒントが不足しているものばかりでした。
『どっかにトータル的に見た開発の書籍はないかな?』と思ってた時に出会ったのが『結城浩』さんの書籍 です。彼の著書はWebでの活用ができやすい上に、CGIの著作の中などでもC言語との対比をところどころに ちりばめてくれていて言語をかじったことのある人なら非常に有効だと感じました。 しかも小難しい専門書と違い実用的でわかりやすい言葉で書かれています。
僕が参考にさせてもらったのは彼の『Perlで作るCGI入門(応用編)』という書籍ですが、『結城浩』さんには その他の言語の著書もたくさんあるようです。僕と同じように世間のプログラム解説本にちょっと物足りなさを 感じている人には、ぜひ一度彼の本を開いてみることをお勧めします。
ちなみに上記は完全な私見です。多言語を操る作家さんの本に出会えてうれしかったので私的に紹介してみました。
現在僕は仕事上でPost-ScriptとXMLもかじっていますが、(VBでPost-Scriptのコードをいじるアプリを作ってます)他の言語に比べて書籍もサイトも有効な物に出会えずハンマー・テクノロジー的な手法(サンプルプログラムをばらしたり、くっつけたりしてコードの意味を解釈していく方法)でなんとかプログラムを組んでいます。もしこのページを読んでいる方で、いいサイトや書籍(レベル2,3)を知っている方がいたらぜひ教えてください。
この言語はちょっとくせがあっておもしろいですよ。

/// サイト・インフォメーション //////////////////////////////////////
〓特集〓 ホームページデザインのプロになってみない?!
■高収入も夢じゃない。WEBデザインのプロになれる。 ■今、需要が急増中のWEBデザイナーの勉強を始めてみませんか。 ■通信講座なので、学校に通う時間がなくても大丈夫。在宅ワークやSOHOで高収入可能。 ■入学金無料のチャンス。詳しい案内書を無料送呈中。
 [223512]

>>サービス検索 [設置]

【インターネット】
Yahoo! JAPANの検索結果で上位表示する方法
【キャッシング】
キャッシング(ローン)比較
【グルメ】
ホットペッパー
【レンタルサーバー】
ロリポップのドメインは選べる全85種類!!
NTTPCのレンタルサーバー/ホスティングサービス WebARENA
■☆さくらインターネット
ただのレンタルカートじゃない 素敵なレンタルカートです!
大容量・高機能レンタルサーバー heteml
【学習・教育】
★就・転職に有利!パソコン会計資格が取れる!
〓特集〓 ホームページデザインのプロになってみない?!
【視力・コンタクト】
カラコン通販【007速配コンタクト】度ありカラコン40色以上!
【就職・転職】
介護福祉の求人情報17,000件。カイゴジョブ
【出会・結婚】
結婚式の情報いっぱい!ゼクシィnet会員登録はコチラ
【男性美容】
包茎治療に上野クリニック
【旅行】
■国内宿・ホテル予約なら、るるぶトラベル!
海外旅行はJTB!Web限定商品など、海外ツアー検索・予約が可能!
【関連サイト】
[血液型・生年月日占い] [海外旅行,沖縄生活(一人…旅の肖像画)] [インターネット有効活用術] [ネットサービス、ネットショップ、通販のWSW] [求人情報(就職・転職・派遣)比較] [アクセスアップ支援相互リンク] [無料一括登録支援] [資産運用(株式投資・外国為替)比較] [ネットで副収入・お小遣い] [株式投資分析リンク集] [モバイルサイト検索-モバイルパーク] [クレジットカード比較] [キャッシング(ローン)比較] [アフィリエイト比較] [ネット広告代理店比較] [ASPカタログ] [売れるASを作る方法] [格安レンタルサーバー比較] [ビジネス情報比較] [旅行会社比較] [懸賞比較] [オンラインゲーム比較] [結婚情報比較] [ダイエット情報比較] [グルメ情報比較] [オートリンクシステム紹介] [キャンペーン・お得情報] opqr.infoモバイル→ [モバイルキャッシング] [キャッシングファイル] [着うた着メロ] [モバイル情報BOX] [モバイル懸賞] [携帯deゲーム] [無料携帯サイト] [携帯占い] [モバイルパーク] [投資マニュアルと投資情報] [投資用口座開設] [ネットナビ] [ACUPサーチE] [ダイエットショップ] [手配info] [リストサイト] mit.s16.xrea.com→ [カラーチャート] [ナイトファン] [アフィリエイトリンク] NSFレンタルサーバー

=Powered by opqr.info=  [利用規約及び免責事項] [マスコミ各位・ご意見ご感想] [広告の掲載について]