さて、サーバーの環境変数はいろいろなものがあります。
環境変数 | 意味 |
---|---|
CONTENT_LENGTH | フォームからの入力データのサイズ |
SERVER_NAME | サーバーのホスト名 |
HTTP_HOST | ホスト名 |
HTTP_REFERER | リンク元URL |
HTTP_USER_AGENT | アクセス元のOS,ブラウザ情報 |
PATH | パス情報 |
SCRIPT_NAME | CGIプログラムのURL |
REMOTE_ADDR | ユーザーのIPアドレス |
REMOTE_HOST | ユーザーのホスト名 |
HTTP_HOST | ドメイン名 |
さて、現在の環境からこれらの値を取得するにはgetenv関数を使います。
char *getenv( const char *varname );また、stdlib.hをインクルードする必要があります。 呼び出し側のSHTMLは、前章と同じです。
では、プログラムを見てみましょう。
// count03.c #include <stdio.h> #include <process.h> #include <time.h> #include <stdlib.h> #define FILENAME "log/count.log" #define LOGNAME "log/ac.log" //アクセスログ int main() { FILE *fp; int cnt, newcnt, i; time_t present_tm; struct tm *my_time; char *now_time; char *lpszBrowser, *lpszUserIP; lpszBrowser = getenv("HTTP_USER_AGENT"); lpszUserIP = getenv("REMOTE_ADDR"); time(&present_tm); my_time = localtime(&present_tm); now_time = asctime(my_time); fp = fopen(FILENAME, "r"); if (fp == NULL) { printf("Error!"); exit(-1); } fscanf(fp, "%d", &cnt); fclose(fp); newcnt = cnt + 1; fp = fopen(FILENAME, "w"); if (fp == NULL) { printf("Error!"); exit(-1); } fprintf(fp, "%d", newcnt); fclose(fp); fp = fopen(LOGNAME, "a"); if (fp == NULL) { printf("error!"); exit(-1); } i = (int)strlen(now_time); //asctimeでは、最後に改行とヌル文字が付加されるので改行を取り除く now_time[i - 1] = '\0'; fprintf(fp, "%d,%s,%s,%s\n", cnt, now_time, lpszBrowser, lpszUserIP); fclose(fp); printf("No.%06d",cnt); return 0; }今回も簡単でしたね。
アクセスログは次のような感じになります。
1,Mon Nov 18 22:35:57 2002,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705),192.168.0.10 2,Mon Nov 18 22:35:58 2002,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705),192.168.0.10 3,Mon Nov 18 22:35:59 2002,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705),192.168.0.10 4,Mon Nov 18 22:36:00 2002,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705),192.168.0.10 5,Mon Nov 18 22:37:03 2002,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.0.3705),192.168.0.10 6,Mon Nov 18 22:37:06 2002,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.0.3705),192.168.0.10 7,Mon Nov 18 22:37:47 2002,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98),192.168.0.10 8,Mon Nov 18 22:37:51 2002,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98),192.168.0.10アクセス元のOSはWindowsXP,Windows2000, Windows98SEです。また、3台の異なる パソコンからアクセスしていますが、同一のプロクシを通しているのでREMOTE_ADDRの 値はすべて192.168.0.10となっています。
Update Nov/19/2002 By Y.Kumei