/*
* リンク先記録用プログラム
* 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" );
}
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();
}