画像を使ったアクセスカウンターの作成方法

このQ&Aのポイント
  • 画像を使用してアクセスカウンターを作成する方法について教えてください。
  • Perlを使用してアクセスカウンターを作成する方法について教えてください。
  • アクセスカウンターのソースコードの中にある「=~ s/(.)/<img src="./images/$1.gif">/g;」の意味がわかりません。
回答を見る
  • ベストアンサー

画像を使ったアクセスカウンターですが。。。

どなたか教えていただければ大変ありがたいです。 画像(0.gif~9.gif)を使用し、アクセスカウンターを作る 次のソースの内、 ------------------------------------------------------------------- #!c:/perl/bin/perl require './sub_lock.pl'; $countfile = "./count.log"; $lockdir = "./lockdir"; exit unless(&lock($lockdir)); open(COUNTFILE, "+<$countfile"); chomp($count=<COUNTFILE>); $count++; seek(COUNTFILE, 0, 0); print COUNTFILE "$count\n"; truncate(COUNTFILE, tell(COUNTFILE)); close(COUNTFILE); &unlock($lockdir); $count_img = sprintf("%04d", $count); $count_img =~ s/(.)/<img src=".\/images\/$1.gif">/g; print "content-type:text/html\n\n"; print $count_img; exit; ------------------------------------------------------------------- $count_img =~ s/(.)/<img src=".\/images\/$1.gif">/g; の 「(.)」と「$1」になっているところが、どうも理解できなくて 困っています。 「=~ s」がパターンマッチであることだけは知っています。 CGI辞書などを調べてもやはり意味がわからず、お手上げ状態です。 どうぞよろしくお願いいたします。

  • CGI
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • sando
  • ベストアンサー率38% (24/62)
回答No.1

まず s はパターンマッチでなくて置換です . ピリオドは任意の1文字をあらわします ( ) 括弧は括弧内でマッチするものにマッチします。また後方参照に使われます。この例では後方参照のために使用してます。 後方参照とはマッチした文字列を後で使用するためのものです。 $1 とはその後方参照をする特殊変数です。$1は「最も直前のパターンマッチで1番目の括弧でマッチした文字列が格納されています。 さて、この例では修飾子のgが使用されていますので、マッチしたものすべてを置換します たとえば$count_img="123" だった場合 1と2と3がマッチし、それぞれが置換されますので、 <img src="./images/1.gif"><img src="./images/2.gif"><img src="./images/3.gif"> になるのではないかと思います

cgi_syoho
質問者

お礼

本当にどうもありがとうございました。(レスが早くて驚きました) ・sは置き換えでしたね。ご指導ありがとうございます。 ・()は後方参照とは、いくつかレファランスをもっていますが、 情報がありませんでした。よくわかりました。 ・$1の1は1番目のカッコにマッチするという意味ですね。よくわかりました。 大事なお時間を割いていただきまして、どうもありがとうございました。 また何かと機会がありましたら、どうぞよろしくお願いいたします。

関連するQ&A

  • アクセスカウンタの呼び出し方

    以下のような(アクセスカウンタ)をPerlで書きました #!c:/Perl/bin/Perl.exe print "Content-type:text/html\n\n"; &main; sub main {    my $ninzu,@Hninzu;    $ninzu=&yomikomi;    @Hninzu=&sujibunaki(@Hninzu,$ninzu);    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[8].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[7].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[6].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[5].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[4].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[3].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[2].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[1].".gif>";    print"<IMG SRC=http://localhost/data/suji/".$Hninzu[0].".gif>"; } sub yomikomi {    my $ninzu;    open(RH,"<","count.txt") or die"ファイルが見つかりません";    $ninzu=<RH>;    close(RH);    open(WH,">","count.txt");    $ninzu++;    print WH"$ninzu";    return $ninzu; } sub sujibunaki {    my @Hninzu,$ninzu,$i;    @Hninzu=@_;    $ninzu=shift;    @Hninzu[8]=int $ninzu/100000000;    @Hninzu[7]=int $ninzu%100000000/10000000;    @Hninzu[6]=int $ninzu%100000000%10000000/1000000;    @Hninzu[5]=int $ninzu%100000000%10000000%1000000/100000;    @Hninzu[4]=int $ninzu%100000000%10000000%1000000%10000/10000;    @Hninzu[3]=int $ninzu%100000000%10000000%1000000%100000%10000/1000;    @Hninzu[2]=int $ninzu%100000000%10000000%1000000%100000%10000%1000/100;    @Hninzu[1]=int $ninzu%100000000%10000000%1000000%100000%10000%1000%100/10;    @Hninzu[0]=int $ninzu%100000000%10000000%1000000%100000%10000%1000%100%10;;    return @Hninzu; } これを別のファイル(.html)からこのファイル(.plに)表示される画像 (カウンタ画像)だけを呼び出して.htmlに表示したいんですけど、 どうすればよろしいですか? でしょうか?

  • 画像ファイルが崩れる

    Perlで、CGIを作成しています。 GIF画像をCGI経由で表示させようと思っているのですが、なぜか、画像が崩れてしまいます。GIFだけではなく、Jpegでも同じです。しかし、HTMLファイルの <img>タグでそのまま表示させようとすると、きちんと表示します。 どのようにすれば、崩れを抑えられますか? CGIソース---------------------- #!/usr/local/bin/perl $imgsrc="number/0.gif"; print "Content-type:image/gif\n\n"; open(IMG,$imgsrc); binmode(IMG); print <IMG>; close(IMG); -----------------------------EOF HTML---------------------------- <html> <head> </head> <body> <img src="cgi/image.cgi" width="28" hegiht="31"> </body> </html> ------------------------------EOF gif画像は、 http://www.akikobrand.com/icon/img/10/6/0.gif を使わせていただきました。(個人的な使用です)

    • ベストアンサー
    • CGI
  • アクセスカウンタのタグを貼り付ける??

       無料を謳っているのに、クレジットカードなどと心配な語句が有ります。 どのようなことを書いてあるのか教えてください。  ちなみに、使用は止めて居ます。 <!--タグはここから--><table border="0" cellspacing="0" cellpadding="0"><tr><td align="center"><a href="http://www.rays-counter.com/"><img src="http://www.rays-counter.com/d144_f6_022/4f17b2e7e4b99/" alt="アクセスカウンター" border="0"></a></td></tr><tr><td align="center"><a href="http://goods-fun.net/"><img src="http://www.rays-counter.com/images/counter_01.gif" border="0" alt="GoodsFun-グッズファン"></a><a href="http://www.e-creditcard.info/"><img src="http://www.rays-counter.com/images/counter_02.gif" border="0" alt="クレジットカード比較"></a><a href="http://fx-ch.com/"><img src="http://www.rays-counter.com/images/counter_03.gif" border="0" alt="FX比較サイト"></a><img src="http://www.rays-counter.com/images/counter_04.gif" border="0"><a href="http://engagement-r.net/"><img src="http://www.rays-counter.com/images/counter_05.gif" border="0" alt="婚約指輪サーチ"></a></td></tr></table><!--ここまで-->

  • 昨日と今日のカウンタについて ご指摘下さい

    昨日と今日のカウンタについて カウンターが1こずつではなく、4つとか5つとかずつ増えてしまいます。ですが、html内の <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> を削除すると、ちゃんと1つずつカウントしていきます。(count.datの本日のカウント数もちゃんと1こずつ増えるのを確認しました。) プログラムの何処が間違っているのでしょうか?アドバイスをお願い申し上げます。 <<count.cgi>> #!C:\Perl\bin\perl # 昨日と今日のカウントの取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; open (FILE, "<logday.dat") || die "File Open Err!-logday.dat\n"; $logday = <FILE>; close(FILE); ($day, $yesday) = split(/:/, $logday); #それぞれ、今日の日付、昨日のカウント数に分ける open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; $count = <FILE>; #変数countにデータを収納 close(FILE); ($count, $today) = split(/:/, $count); #それぞれ、トータルカウント数、今日の日付のカウント数に分ける # 数をカウント if($day == $mday){ #同日だったなら、トータルと本日のカウントだけ取る。 &totalcount(); }else{ #違っていたら、本日のカウント数を昨日へ、本日のカウントを0に、日にちを修正 $yesday = $today; $today = 0; open (FILE, ">count.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$count\:$today"; flock(FILE,8); close(FILE); open (FILE, ">logday.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$mday\:$yesday"; flock(FILE,8); close(FILE); &totalcount(); #その後カウントをとる } # 引数受取 $mode = $ENV{'QUERY_STRING'}; $mode =~ s/\W//g; require "./gifcat.pl"; #画像表示のif文================ if($mode eq "total"){ &total(); }elsif($mode eq "today"){ &today(); }else{ &yestaday();} exit; # ログの更新================================ sub totalcount{ open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); $count++; #トータルカウント数にプラス1 $today++; #同じく本日のカウント数にもプラス1 seek(FILE, 0, 0); print FILE "$count\:$today"; flock(FILE,8); close(FILE); } # カウンタの数字に画像を付ける sub total{ #トータルカウンタ============= @countdata = split(//, $count); foreach $cou(@countdata){ push(@view, "./img-t/$cou.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view); } sub today{ #今日のカウンタ============= @countdatadt = split(//, $today); foreach $coudt(@countdatadt){ push(@viewdt, "./img-d/$coudt.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdt); } sub yestaday{ #今日のカウンタ============= @countdatady = split(//, $yesday); foreach $coudy(@countdatady){ push(@viewdy, "./img-d/$coudy.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdy); } <<count.html>> <html> <head> <title>カウンタ</title> </head> <body> <p>トータルカウント数は<img src="./count.cgi?total">です</p> <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> </body> </html> <<count.dat>> トータル数:本日のカウント数 <<logday.dat>> 今日の日:昨日のカウント数

    • ベストアンサー
    • Perl
  • 画像サイズの指定方法

    $img = 'image.png'; open(IMG,"$img"); $byte = -s $img; print "Content-type: image/gif\n"; print "Content-length: $byte\n\n"; print <IMG>; close(IMG); exit; 上記のように画像を表示させているのですが、縦横サイズは どのように調整すればよろしいのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlで画像表示

    htmlファイルから<img src="./aa.cgi">と書いて連続した画像を表示させたいのですが @aa =(1,2,3); foreach(@aa){ open(IMG, "./$_.gif"); binmode(IMG); binmode(STDOUT); print "Content-type: image/gif\n\n"; read(IMG, $img, 1024); print $img; close(IMG); } こう書いたらだめなのでしょうか?

    • ベストアンサー
    • Perl
  • 変数名で付けた画像の表示方法

    初心者ですよろしくお願いします 画像をforで回し表示いたいのですが以下3方法試しましたがいずれもうまく表示されません  Perlは文字列と数値が私にとってあいまいなので----と言うかそれ以前の問題ですね HTMLに変数名を入れても無理ですね今気がつきました cgiで画像を表示するのはどうしたらよろしいでしょうか?ご指導お願いします $kaku =".gif"; @bb = ( "0.gif","1.gif","2.gif","3.gif","4.gif"); for($i=0; $i<=$#file; $i++){ $jj=$i.$kaku; $jjj=length($jj);  #レングス5になってました print "<img src=\"$jj\" width=\"55\" height=\"35\">\n"; print "<img src=\"$bb[$i]\" width=\"55\" height=\"35\">\n"; print <<EOM; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <img src= "$jj" width="55" height="35"> EOM }

  • 画像をcssでレイアウトしたいです

    以下のボックスにあるイメージをボックスの左上を基準に2x2の形に並べたいです。その際にcssのpositionを使用してrelativeを指定して定義したのですがうまくいきません。正しい指定の方法を教えてください。 <div id="bottom_right"> <img src="images/image1.gif" width="176" height="57" /> <img src="images/image2.gif" width="176" height="57" /> <img src="images/image3.gif" width="176" height="57" /> <img src="images/image4.gif" width="176" height="57" /> </div>

    • ベストアンサー
    • HTML
  • firefoxで表示される画像がIEで表示されない

    同じHTML内に <img src="images/9.jpg" alt=""商品画像 /> と <img src="images/title_1.gif" /> がありますが firefoxでは上記の画像を含めすべての画像が表示されますが IEでは <img src="images/title_1.gif" />は表示されるが <img src="images/9.jpg" alt=""商品画像 />は 表示されません。 なぜか判りません。 原因がまったくわかりません。 教えてください。よろしくお願いします。

    • ベストアンサー
    • HTML
  • チェックボックスのON / OFFで画像を表示する

    初めまして、以下のURLを参考に制作していましたが、DOCTYPEを指定すると画像が表示されず困っております。 http://iswebmag.hp.infoseek.co.jp/sample163.html 指定したDOCTYPEは以下のものです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> HTMLソースは以下です。下記ソースの※DOCTYPEが無ければ動きます。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <SCRIPT language="JavaScript"> <!-- function show(c,img){ if(document.form.elements[c].checked == true){ document.getElementById(img).style.width=35; } else { document.getElementById(img).style.width=0; } } // --> </SCRIPT> </HEAD> <BODY> <H1>天体写真集</H1> <BR> <TABLE width=610 align=right border=0 cellspacing=0 celpadding=0> <TR><TD width=610> <IMG src="../images/color_n-1.gif" id="img01" style="width:0px"><IMG src="../images/color_n-2.gif" id="img02" style="width:0px"><IMG src="../images/color_n-3.gif" id="img03" style="width:0px"><IMG src="../images/color_n-4.gif" id="img04" style="width:0px"><IMG src="../images/color_n-5.gif" id="img05" style="width:0px"><IMG src="../images/color_n-6.gif" id="img06" style="width:0px"><IMG src="../images/color_n-7.gif" id="img07" style="width:0px"><IMG src="../images/color_n-8.gif" id="img08" style="width:0px"><IMG src="../images/color_n-9.gif" id="img09" style="width:0px"> </TD></TR> </TABLE> <FORM name="form"> <INPUT type=checkbox onClick="show(0,'img01')">朝焼に輝く星<BR> <INPUT type=checkbox onClick="show(1,'img02')">木立の隙間から<BR> <INPUT type=checkbox onClick="show(2,'img03')">夜明け<BR> <INPUT type=checkbox onClick="show(3,'img04')">自転を感じる<BR> <INPUT type=checkbox onClick="show(4,'img05')">昼の星空<BR> <INPUT type=checkbox onClick="show(5,'img06')">砂丘の月<BR> <INPUT type=checkbox onClick="show(6,'img07')">月の軌跡<BR> <INPUT type=checkbox onClick="show(7,'img08')">彗星の飛来<BR> <INPUT type=checkbox onClick="show(8,'img09')">彗星 </FORM> </BODY> </HTML> ヒントでもお教え頂ければ幸いです。m(_ _)m 何卒、宜しくお願い申上げます。

専門家に質問してみよう