在静态页面中实现点击数统计

 更新时间:2016年11月25日 16:33  点击:1644
在文章发布系统中采用服务器端生成静态页面的方法可以有效减轻服务器的负担,特别是对大流量网站非常有效。但是既然生成的是静态页面,生成时是什么样,显示就是什么样了,对于文章常见文章被阅读次数怎么显示呢?
经考虑,可用如下方案解决:
生成静态页面时会产生一个文章的id存到数据库中,那么我们在制作文章的模板的时候就可以在这个文章的id上做文章,文章模板包含以下语句:
<SCRIPT src="counter.asp?articleId=<%=#articleId#%>"></SCRIPT >
说明:
在利用模板生成文章时,把"#articleId#"进行模式匹配,替换为新添加的文章的id号。
 
counter.asp 文件为实现记数的asp文件
<%
''###################
''######开始#########
''BY 王向超
''###################
dim articleId,sqlStr,hits
articleId=int(trim(request.querystring("articleId")))
sqlStr="update articles set hits=hits+1 where articleId=" & articleId
''给文章点击数加1
conn.execute(sqlStr)
''读出文章点击数
hits=conn.execute("select hits from articles where articleId=" & articleId)(0)
%>
''打印出文章点击数
document.write(<%=hits%>)


  能不能让php为你的网页添加一些每隔一段时间就自动更新的内容,以更好的吸引访客呢?实现这一功能并不需要太高深的编程知识,请看以下例子:
  (一)英语谚语
  让我们来看一个简单的应用:让php程序从数据库中随机提取一行记录,显示在网页上,隔15分钟再去读取另一条记录。英汉对照的谚语是个适合显示的内容。
  考虑到放置个人主页的廉价虚拟主机多数不支持MySQL之类的数据库,我们使用文本型数据文件来存放数据,这对于流量不很大的网站来说足够了。建立一个文本文件,命名为english.dat,内容如下:
  A bad beginning makes a bad ending. 恶其始者必恶其终。
 
  A bad bush is better than the open field. 有胜于无。
 
  A bad compromise is better than a good lawsuit. 吃亏的和解也比胜诉强。
 
  A bad conscience is a snake in one’s heart. 做贼心虚。
 
  A bad custom is like a good cake, better broken than kept. 坏习惯像鲜馅饼,分食要比保存好。
 
  A bad padlock invites a picklock. 开门揖盗。
  ……
  注意,每行是一条完整的记录,中间不要换行;文件中不能有半角的双引号( " )否则在输出数据时程序会解析出错。网上有很多这样的内容,搜索一下即可,也可以去我的网站http://www.musicfly.net/english.dat下载一个数据文件。
  下面就是编写读取数据的程序了。建立一个文本文件,命名为english.php,加入源代码如下:
<?php
$filename = ’english.dat’; //数据文件名
$refresh = 900; //更新周期(以秒为单位,可根据需要自行调整)
$data = file($filename); //将数据文件装入一个数组
$num_lines = count($data); //数据文件行数,也就是记录条数 mt_srand(floor(time() / $refresh));
$id = mt_rand(0, $num_lines - 1); //随机选择一条记录号
$content = chop($data[$id]); //根据记录号选择相应的数据,并截去最后的换行符
echo "document.write("$content");"; //用javascript形式输出数据
?> 
  将english.dat和english.php存盘,上传至服务器的同一个目录下。
  最后一道工序就是让你的网页调用这个php程序来显示内容了。因为php运行的结果是以javascript形式输出的,我们只要把这段php当成一段 javascrupt来调用即可,方法是:用记事本或网页编辑软件打开你要修改的html文件,在你想让动态内容显示的位置加入以下代码:
<?php
if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]$",$email)) {
echo "您的 E-Mail 通过初步检查";
}
?> 
在这句话里,首先是应用了一个eregi函数,这个函数还算好理解。随便找本书,就能给你一段解释: 
语法: int ereg(string pattern, string string, array [regs]); 
返回值: 整数/数组 
本函数以 pattern 的规则来解析比对字符串 string。

比对结果返回的值放在数组参数 regs 之中,regs[0] 内容就是原字符串 string、regs[1] 为第一个合乎规则的字符串、regs[2] 就是第二个合乎规则的字符串,余类推。若省略参数 regs,则只是单纯地比对,找到则返回值为 true。

而不太好理解的就是前面的这段正则表达式了:^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]$ 
在这段正则表达式中,"+"表示前面的字符串连续出现一个或多个;"^"表示下一个字符串必须出现在开头,"$"表示前一个字符串必须出现在结尾; 
"."也就是".",这里""是转义符;""表示前面的字符串可以连续出现2-3次。"()"表示包含的内容必须同时出现在目标对象中。"[_.0-9a-z-]"表示包含在"_"、"."、"-"、从a到z范围内的字母、从0到9范围内的数字中的任意字符; 
这样一来,这个正则表达式可以这样翻译: 
"下面的字符必须在开头(^)"、"该字符必须包含在"_"、"."、"-"、从a到z范围内的字母、从0到9范围内的数字中([_.0-9a-z-])"、"前面这个字符至少出现一次(+)"、@、"该字符串由一个包含在从a到z范围内的一个字母、从0到9范围内的数字中的字符开头,后面跟至少一个包含在"-"、从a到z范围内任何一个字母、从0到9范围内任何一个数字中的字符,最后以.结束(([0-9a-z][0-9a-z-]+.))"、"前面这个字符至少出现一次(+)"、"从a到z范围内的字母出现2-3次,并以它结束([a-z]$)" 
很繁杂是吧,对了,正因为这样,人们才使用正则表达式。


  很多开发中涉及到用户的Session验证很保留的问题,这个问题比较有意思,总结了几种方案,只供参考。
  [ 问题提出 ]
  为了满足足够大的应用,满足更多的客户,于是我们架设了N台Web服务器(N>=2),在多台Web服务器的情况下,我们会涉及到一个问题:用户登陆一台服务器以后,如果在跨越到另一台服务器的时候能够继续使用客户的Session?
  (以下描述方案只是针对Linux/Unix Apache Mysql PHP的开发架构,当然,也可以扩展到其他平台。)
  [ 问题解决方案 ]
  既然我们的问题已经摆在面前了,那么就要从技术角度去解决问题,给我们的客户更好的体验,总结了几个方案。
  1. 写客户端Cookie的方式
  当用户登陆成功以后,把网站域名、用户名、密码、token、session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用户从一台Web服务器跨越到另一台服务器的时候,我们的程序主动去检测客户端的cookie信息,进行判断,然后提供对应的服务,当然,如果cookie过期,或者无效,自然就不让用户继续服务了。当然,这种方法的弊端就不言而喻了,比如客户端禁用了cookie或者cookie被黑客窃取了呢?
  2. 服务器之间Session数据同步的方式
  假设Web服务器A是所有用户登陆的服务器,那么当用户验证登陆一下,session数据就会写到A服务器里,那么就可以自己写脚本或者守护进程来自动把session数据同步到其他Web服务器,那么当用户跳转到其他服务器的时候,那么session数据是一致的,自然就能够直接进行服务无须再次登陆了。缺点是,可能会速度慢,不稳定,如果是单向同步的话,登陆服务器出现问题,那么其他服务器也无法服务,当然也可以考虑双向同步的问题。
  3. 利用NFS共享Session数据的方式
  其实这个方案和下面的Mysql方案类似,只是存储方式不一样。大致就是有一台公共的NFS服务器(Network File Server)做共享服务器,所有的Web服务器登陆的时候把session数据写到这台服务器上,那么所有的session数据其实都是保存在这台NFS服务器上的,不论用户访问那太Web服务器,都要来这台服务器获取session数据,那么就能够实现共享session数据了。缺点是依赖性太强,如果NFS服务器down掉了,那么大家都无法工作了,当然,可以考虑多台NFS服务器同步的形式。
(关于NFS的经典文章:http://linux.vbird.org/linux_server/0330nfs.php)
WAP(无线通讯协议)是在数字移动电话、个人手持设备(PDA等)及计算机之间进行通讯的开放性全球标准协议。随着无线通讯的不断发展,静态的WAP页面在很多方面已经不能满足用户个性化的要求,因此开发者可以在WAP服务器端使用诸如PHP等语言产生动态的WML页面,来满足用户的需要。

   WAP的应用结构非常类似于Internet,一个典型的WAP应用请求步骤描述如下:
   1. 具有WAP用户代理功能的移动终端(如WAP手机),通过内部运行的微浏览器向某一网站发送WAP服务请求。该请求先由WAP网关截获,对信息内容进行编码压缩,以减少网络数据流量,同时根据需要将WAP协议转换成HTTP协议。
   2. 协议将处理后的请求转送到相应WAP服务器。在WAP服务器端,根据页面扩展名等属性,被请求的页面直接或由服务器端脚本解释后输出,再经过网关传回给用户。
  从上述的WAP应用流程可以发现,生成动态WAP页面与动态产生Web网页的过程非常相似。但是由于WAP应用使用的WML语言来源于语法严格的XML,因此要求输出的格式必须按WAP网页的规范输出。同时,由于WAP协议的应用范围及移动客户端的软、硬件配置等局限性,对每次输出的页面的大小、图像的格式及容量都有一定限制。本文笔者将以PHP语言为例,和广大网络程序开发爱好者共同探讨动态输出WAP页面的方法和应用。
  输出简单的动态WAP页面
  由于生成WAP页面的过程和生成一般的Web页面非常类似,笔者通过一个最简单的WAP页面的例子来介绍。不过提醒一句:由于需要PHP解释器来解释该程序并输出WAP页面,因此所有类似的程序应以“php”为扩展名哦。
  < ?php
  header("Content-type: text/vnd.wap.wml"); //定义输出文档为WML类型
  echo (" ");
  echo ( "Hello WAP" );
  echo ("");
  ?>
  该实例可以在WAP手机模拟器中浏览,输出一句经典的“Hello WAP”语句,但是在普通的网络浏览器中是无法识别的,原因很简单,在程序开头声明了该输出文档为WML类型,只有WAP设备能够识别并解释。不过又要提醒一句:常见的HTML语言对规范性要求不严,大多数浏览器能“宽容”地接受其中的编写错误,但是WML的规范相当严格,任何的错误都可能导致无法输出所需的页面。
   实例1 动态生成图像
  WAP使用的图像是一种特殊的黑白图像格式:WBMP。开发者可以使用一些现有的工具将一般图像转换成WBMP格式,然后在WML文档中使用。但是如果在WAP程序中能动态地生成所需图像(如股市的K线图),将会使程序有极其广阔的应用前景。PHP提供了强大的图形绘制功能,下面的实例将将在WAP模拟器中显示一个黑色的矩形框。
[!--infotagslink--]

相关文章

  • C#网站生成静态页面的实例讲解

    今天小编就为大家分享一篇关于C#网站生成静态页面的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
  • Asp.net动态生成html页面的方法分享

    这篇文章介绍了Asp.net动态生成html页面的方法,有需要的朋友可以参考一下...2021-09-22
  • nginx配置访问图片路径以及html静态页面的调取方法

    这篇文章主要介绍了详解nginx配置访问图片路径以及html静态页面的调取方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2016-12-15
  • apache .htaccess 伪静态页

    apache .htaccess 伪静态页 静态页的地址: http://211.166.45.10/company/new/new_10000.html 指定的动态地址:php?id=10000">http://211.166.45.10/company/new.php?id=...2016-01-28
  • 百万数据级的网站静态页面的生成方案

    传统的生成静态页面的方法大家都很清楚,无非就是以下两种: 方案一: 1、每增加/修改一个栏目的信息的时候,就生成一次该栏目(包括父栏目)的页面; 2、每增加/修改一...2016-09-20
  • C#生成单页静态页简单实例

    这篇文章主要介绍了C#生成单页静态页简单实例,是一个非常实用的技巧,需要的朋友可以参考下...2020-06-25
  • 使用PHP实现生成HTML静态页面

    从PHP生成HTML静态页面并存储到以年份和月份为名称创建的目录。读取全部数据批量生成,全部生成后弹出提示。可指定批次生成数量,建议不超过800,否则执行速度会有问题。(出于众所周知的原因,涉及到数据库的数据字段名称做了...2015-11-24
  • php定时自动生成html静态页面

    php定时自动生成html静态页面 "ob_start()、ob_end_clean()、ob_get_contents()" ob_start():是打开缓冲区的,就是要把您需要生成的静态文件的内容缓存在这里; ob_g...2016-11-25
  • 谈PHP生成静态页面

    一、引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,假如不借助数据库或其他的设备保存相关信息的话,整体的治...2016-11-25
  • C#中实现伪静态页面两种方式介绍

    伪静态技术的诞生,带动了于搜索引擎友好C#中实现伪静态页面有两种方式,本文将一一详解,感兴趣的朋友可以参考下,希望本文对你学习伪静态有所帮助...2021-09-22
  • php生成静态页面程序与原理分析

    生成静态页面是php中来减少服务器负载与seo网站优化一个不错的选择,所以php生成静态页面功能是几乎所有php程序员必须了解并掌握的一个知识点,下面我来给大家介绍php生...2016-11-25
  • php生成静态页面代码

    本款生成静态页面程序实现原理是做好自定的模板标签,然后由str_replace把标签替换成指定的内容,再由fopen生成指定 文件名的静态页面,这样就OK了。 代码如下...2016-11-25
  • php 生成静态页面类,利用ob_start ob_get_content 函数简单实用

    class CreateHtml{ /*function mkdir($prefix= 'article' ){ $y = date('Y'); $m = date('m'); $d = date('d'); $p=DIRECTORY_SEPARATOR; $filePath...2016-11-25
  • 用Apache的rewrite生成伪静态页面

    我们知道,搜索引擎是偏爱静态页面的,因此,把诸如:http://www.jianglb.com/?p=123的页面改成http://www.jianglb.com/apaeche-rewrite.html显然有利于被搜索. 但是,如果一...2016-01-28
  • ASP.NET编程简单实现生成静态页面的方法【附demo源码下载】

    这篇文章主要介绍了ASP.NET编程简单实现生成静态页面的方法,较为详细的分析了asp.net生成静态页面的步骤与相关操作技巧,并附带相关实例源码供读者下载参考,需要的朋友可以参考下...2021-09-22
  • asp.net实现生成静态页并添加链接的方法

    这篇文章主要介绍了asp.net实现生成静态页并添加链接的方法,非常实用的功能,需要的朋友可以参考下...2021-09-22
  • PHP生成静态页面类

    <?php date_default_timezone_set( "Asia/Shanghai"); class TCreateHTML{ var $HTemplate; //模板的文件 var $FileName; //新文件名称 var $HTFilePath;//...2016-11-25
  • 网页怎么调用php?html静态页面调用php文件的方法

    本文详细介绍了html静态页面调用php文件的方法,非常实用,有兴趣的同学可以参考一下。 在HTML里面调用动态模块,比如浏览次数,除了使用JS/AJAX可以实现,还可以利用JS调...2017-07-06
  • php生成静态页面的简单实例

    一个简单的实例: 新闻模版文件news_tmp.html: <html> <head> <title>{title}</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"...2016-11-25
  • PHP生成静态页面的两种方法

    1. 治理后台添加记录时,直接生成目标html页面,并且前台调用连接直接指向生成的html页面。这种方法程优点是程序效率最高。 服务器负荷轻,不过由于生成的是纯静态页面,一...2016-11-25