用Perl製作頁面計數器 (轉載於上海熱線) - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 用Perl製作頁面計數器 (轉載於上海熱線) (http://www.webasp.net/article/8/7787.htm) |
| -- 作者:未知 -- 發佈日期: 2003-09-13 |
| 用Perl製作頁面計數器 網友大都喜歡在自己的主頁上做一個計數器來顯示自己主頁被訪問的次數。以前我們只能申請由第三方提供的計數器或用由系統管理員提供的計數器,受到很大限制。現在許多免費空間都提供了CGI權限,因此我們也可以用CGI方式實現一個自己的計數器。 計數器可以用數據庫方式實現,也可以用文本文件方式實現。由於文本文件方式不涉及系統的數據庫管理系統,相對簡單,容易實現,因此,在這裡介紹文本方式的計數器。 計數器的原理比較簡單,頁面每次被訪問的時候,對記錄訪問次數的數字加1,然後將這個數顯示出來。原理雖然簡單,在具體實現上還是需要一定的技巧。 由於一個CGI程序在服務器上並非一直駐留在內存中,為了對訪問次數進行計數,則需要把這個數字存入一個文件中,每當主頁被訪問時,打開該文件將訪問數字加1後再存入文件中。 網站是多用戶環境,在訪問文件時必須對文件上鎖以禁止其他用戶對文件的訪問,這樣才能保證數據的可靠性。然而不同網站使用的操作系統不同,其對文件上鎖的機制也不同。本文采用了一種各種平台都適用的方法,每當有頁面被訪問時,CGI程序創建一個臨時文件,此時若有其它進程也要對文件進行存取則須等待,進程對文件更新後刪除該臨時文件,等待的進程才能對文件進行存取。 下面是用Perl實現的一個計數器源代碼,並加注了註釋: #!/usr/local/bin/perl #存貯表示主頁訪問量數字的文件 $data = '/usr/local/etc/httpd/htdocs/counter.data'; #用作文件鎖的臨時文件 $lockfile = '/usr/local/etc/httpd/htdocs/counter.LOCK'; # 主模塊 &increment; print "Content-Type: text/html\n\n"; print $accesses; sub increment { # 檢查臨時文件是否存在 while (-e $lockfile) { sleep 2; # 存在則等待2秒 } # 創建臨時文件 open(LOCK," >$lockfile") || die "Can't create lockfile.\n"; # 讀文件並更新數據 open(DATA,$data) || die "Can't open data file.\n"; $accesses = < DATA >; $accesses++; print DATA "$accesses\n"; close(DATA); # 刪除臨時文件,對數據文件開鎖 close(LOCK); unlink($lockfile); } 你可以在頁面上需要顯示計數器的地方加上下面的HTML代碼,頁面被訪問的時候,來訪者就可以知道自己是第幾位來訪者了。 < html > < head > < title >Home Page< /title > < /head > < body > < h1 >Home Page< /h1 > < p >歡迎您!第 < !--#exec cgi="/cgi-bin/text-counter.cgi" > 位來訪者.< /p > < /body > < /html > 只要掌握了計數器的原理,就可以設計出稱心如意的計數器,使你的主頁更有吸引力。 |
| webasp.net |