/* * リンク先記録用プログラム * by Hiroshi Tsujimura 17 Jan 1997 * last updated 25 May 1997 * * Copyright (c) 1997 by Hiroshi Tsujimura. All Rights Reserved. * mailto: tsupo@na.rim.or.jp or mailto: tsupo@typhoon.club.or.jp * * * 自分のWebページがどのWebページから参照されているかを調べ、 * ファイルに記録する。副作用として、参照元Webページが存在する場 * 合は、「BACK」ボタン(またはアンカー)を表示するためのHTML文書用 * の文字列を生成する。 * * 注意: このプログラムは、SSIとして使用することを前提にしている。 * * 使用方法: 参照元ページを調べたいWebページの 〜 * の適当なところに、以下のような行を挿入する * * * ~~~~~~~~~ ~~~~~~~ * ↑ ↑ * | 調査結果を保存するファイル * | (link.log)を置くディレクト * | リ名 * このプログラム(実行形式)のパス名 * (調査対象Webページのあるディレク * トリからの相対パス名) */ #include #include #include #include #include #include #ifndef MAXPATHLEN #define MAXPATHLEN 256 #endif /* 以下の2行は、各自の環境・都合に合わせて変更すること */ #define LINKLOG "link.log" /* 参照元Webページ記録ファイル */ #define MYPAGE "http://www.na.rim.or.jp/~tsupo" /* 自Webページ最上位パス名 */ char logDir[MAXPATHLEN] = "count"; /* 参照元Webページ記録ファイル格納ディレクトリ名(デフォルト) */ char logFile[MAXPATHLEN]; int recordLink() { struct stat b; FILE *fp; char *p, *q, buf[BUFSIZ]; if ( ( ( p = getenv( "HTTP_REFERER" ) ) == NULL ) || ( *p == '\0' ) ) return ( 0 ); /* * change from "%7Exxx" to "~xxx" (if any) */ if ( ( q = strchr( p, '%' ) ) != NULL ) { if ( ( ( p == q ) || ( *(q - 1) == '/' ) ) && !strncmp( q + 1, "7E", 2 ) ) { *q = '~'; strcpy( q + 1, q + 3 ); } } if ( strncmp( p, MYPAGE, strlen(MYPAGE) ) ) { if ( (fp = fopen(logFile, !stat(logFile, &b) ? "a" : "w")) == NULL ) return ( -1 ); fprintf( fp, "%s\n", p ); fclose( fp ); } strcpy( buf, p ); #ifdef JAPANESE #define BACK "前のページへ戻る" #else #define BACK "Back to the referring page" #endif #ifdef EXTEND_FOR_MOZILLA if ( ( ( p = getenv( "HTTP_USER_AGENT" ) ) != NULL ) && !strncmp( p, "Mozilla", strlen("Mozilla") ) ) { printf("
\n" ); printf( "\n", BACK); printf("
\n" ); } else printf( "%s\n", buf, BACK ); #else printf( "%s\n", buf, BACK ); #endif return ( 1 ); } void main( argc, argv ) int argc; char *argv[]; { int i; for ( i = 1; i < argc; i++ ) strcpy( logDir, argv[i] ); sprintf( logFile, "%s/%s", logDir, LINKLOG ); recordLink(); }