return TRUE;
}

BOOL WINAPI TerminateFilter(DWORD dwFlags)
{
 int i;
 char buf[16];

 strcpy(lurl, ((PHTTP_FILTER_URL_MAP)pvNote)
->pszURL);
 _strlwr(lurl);
 for (i=0; i<pages; i++) {
 if (strcmp(lurl, urls[i])==0) {
  counts[i] ++; /* 计数值扩充 */
  if (counts[i]%10==0) { 
/* 当计数值满10时记入文件,
 防止系统蓦地死掉时数据总体错失 */
  _itoa(counts[i], buf, 10);
  WritePrivateProfileString(“VisitCounter”,
 urls[i], buf, logfile);
  }
  break;
 }
 }
 return SF_STATUS_REQ_NEXT_NOTIFICATION;
}

fcount.c:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <httpfilt.h>

作为一个WWW服务器软件,微软集团的Internet Infomation Server(IIS)轻松易学,管理有助于,获得了广大的利用。您还能透过ISAPI过滤器,进行和睦定制的管理,来巩固IIS的效果与利益。ISAPI过滤器能够定制以下的处理:接收HTTP左券头预管理、发送HTTP左券头预管理、发送生数据预管理、拿到生数据预管理、HTTP会话甘休音信处理、自定义的乌海评释机制、URAV4L映射新闻管理、日志记录管理等。灵活应用那几个定制管理,您能够产生大多雷同难以完毕的作用,得到意料之外的效能。不过ISAPI过滤器使用不当也会耳熟能详服务器的品质。 

BOOL WINAPI GetFilterVersion
(HTTP_FILTER_VERSION *pVer)
{
int i;

ISAPI过滤器的支付特别轻易,只供给达成多少个接口DLL函数就能够。它们是GetFilterVersion(卡塔尔国、HttpFilterProc(State of Qatar、TerminateFilter(卡塔尔,大家能够查阅MSDN掌握详细的用法。ISAPI过滤器是DLL文件,通常用C/C++语言开采。为使ISAPI过滤器能够运营,您供给在注册表的HKEY_LOCAL_MACHINESystemCurrentControlSet
ServicesW3SVCParameters下树立一个字符串项,其名为”Filter Dlls”,值为ISAPI过滤器文件的全路线名称。若那一个字符串项已经存在,只需把它的全路线名称参加个中,分裂的ISAPI过滤器文件之间用”;”分隔,您能够依据实践的事前顺序加在适当之处。设置好后再也启航IIS服务,您的ISAPI过滤器就发挥功用了。 

fcount.def:
LIBRARY fcount
EXPORTS GetFilterVersion
 HttpFilterProc
 TerminateFilter

#define logfile “C:\InetPub\fcount.log”
#define pages 5
char* urls[] = {
  “/default.htm”,
  “/banner.gif”,
  “/product/readme.txt”,
  “/product/product1.htm”,
  “/product/product2.htm”
  };
int counts[pages];

 for (i=0; i<pages; i++) { 
    /* 系统甘休时将计数值写入文件 */
 _itoa(counts[i], buf, 10);
 WritePrivateProfileString(“VisitCounter”, 
 urls[i], buf, logfile);
 }
 return TRUE;
}

DWORD WINAPI HttpFilterProc
(HTTP_FILTER_CONTEXT *pfc,
 DWORD noteType, VOID *pvNote)
{
 int i;
 char lurl[512];
 char buf[16];

如上叁个例证小编辑访问取VC 6.0编写翻译,在WINNT二〇〇〇 + SP3 和 IIS 5.0上调治通过。

 pVer->dwFilterVersion = HTTP_FILTER_REVISION;
strcpy(pVer->lpszFilterDesc, “fcount”);
 pVer->dwFlags = SF_NOTIFY_URL_MAP; /* 过滤的开始和结果 */

 for (i=0; i<pages; i++) { /* 从文件读入起先计数值 */
counts[i] = GetPrivateProfileInt(“VisitCounter”, 
urls[i], 
0, logfile);
}

对拜谒内容举办计算剖判: 
常备我们在急需计数的页面内放贰个计数器,或许利用ASP文件来得以完成计数作用。这种艺术无法适用于如README.TXT等别的非HTML格式的文本。如若使用IIS的日志功用又太占用空间而不便于。小编通过定制U安德拉L映射信息管理来跟踪感兴趣的多少个公文的计数总计,将结果记录在三个文件中。 

上边是它的源程序。 

上面作者举三个有板有眼的应用例子。 

相关文章