#! /usr/bin/perl
#ファイル自動更新CGI　ver1.0　2007.03.24########################################
#
#　Copyright デジタルデザインオフィスぱそぱそ
#　http://www.paso2.net/
#　paso2@paso2.net scripted by Amane Nagaoka
#
#　特定フォルダにある特定のファイル群を更新して、最終更新日時を書き換える。
#　検索エンジン用サイトマップを生成する。
#　探索したファイル内の特定の文字列を削除・置き換える。
#　このスクリプトを許可なく改変したり、いかなる理由があろとすも配布することを
#　禁じます。設置ライセンスは、１サーバーにつきライセンス１つです。
#　同サーバー内に複数ドメインがある場合は１ライセンスでも可。
#　当オフィス以外の設置代行を禁じます。
#
################################################################################

$| = 1;

#設定#############################################################################

#1.自分のドメインを絶対パスで書き換えてください。
$DOMAIN = "https://www.e-consul.info/";

#2.ライブラリインクルードパスを書き換えてください。
require '/var/www/html/www.e-consul.info/cgi-lib.pl';
#CGIから見たパスになります。同じ位置にある場合はこのまま
#ひとつ上とか、ひとつ下の場合は、../cgi-lib.plや./test/cgi-lib.plなどに変更する)
#cronで使う場合はサーバー内の絶対パスに書き換えること

#3.Jcode.pm(日本語変換モジュール)のパスを書き換えてください
BEGIN{ eval "use Jcode"; if($@){ use lib '/var/www/html/www.e-consul.info/'; }}
#CGIから見たパスになります。同じ位置にある場合はこのまま
#サーバーに既にJcode.pmがインストールされている場合はこのままでも動作します
#cronで使う場合はサーバー内の絶対パスに書き換えること

#4.探査フォルダを書き換えてください。
$BASE_DIR = "/var/www/html/www.e-consul.info/";	#!探査フォルダ
#(探査する場所がCGIと同じ場合はこのまま)
#ひとつ上とか、ひとつ下の場合は、../や./test/などに変更する)
#最後は必ずスラッシュで終わること
#cronで使う場合はサーバー内の絶対パスに書き換えること

#5.保存フォルダを書き換えてください。
$SAVE_DIR = "/var/www/html/www.e-consul.info/";	#!保存フォルダ
#(保存する場所がCGIと同じ場合はこのまま)
#ひとつ上とか、ひとつ下の場合は、../や./test/などに変更する)
#最後は必ずスラッシュで終わること
#cronで使う場合はサーバー内の絶対パスに書き換えること

#6.スキンファイルフォルダを書き換えてください。
$SKIN_DIR = "/var/www/html/www.e-consul.info/skintemp/";	#!スキンテンプレートフォルダ
#(スキンテンプレートがCGIと同じ場合はこのまま)
#ひとつ上とか、ひとつ下の場合は、../や./test/などに変更する)
#最後は必ずスラッシュで終わること
#cronで使う場合はサーバー内の絶対パスに書き換えること

#7.パターンフォルダを書き換えてください。
$PAT_DIR = "/var/www/html/www.e-consul.info/pattern/";	#!パターンフォルダ
#最後は必ずスラッシュで終わること
#cronで使う場合はサーバー内の絶対パスに書き換えること

#8.パターンマッチによりデータを書き換えますか？
$PAT_FLAG = 0;
#1: 書き換える　0: 書き換えない
#HTML内のアドセンスなどを外す場合に設定します

#9.更新するファイルリスト(カンマ区切り)
@REF_FILE = (".html",".htm",".php");
#(txtやphpファイルも更新したい場合は(".html",".htm",".txt",".cgi")とする )
#ただし画像などはファイルサイズが重いので更新に失敗する可能性が高く避けた
#ほうが良い

#10.無視するファイルリスト(カンマ区切り)
@NO_FILE = ("TMP_","/icart/","www.e-consul.info/thka/","www.e-consul.info/snsm/","www.e-consul.info/link/","/skintemp/","/media/","www.e-consul.info/news1/","/images/","y_key_f11e0a7ef4c0857c.html","googlefa7a95e6e0242ce4.html","www.e-consul.info/mailcorner/","www.e-consul.info/proglam/","www.e-consul.info/siryo/","www.e-consul.info/fruits/css/","y_key_7e1ebcaac8768bef","sitelist.php","wp-","xmlrpc.php","LiveSearchSiteAuth","/np/","nortonsw_7f5b7b70-836b-0.html","/aff/","www.e-consul.info/m/","/mt/","www.e-consul.info/v/","mobile-comments-post.php","www.e-consul.info/jfkin/","/common/","/helpdesk/","www.e-consul.info/tes/","/ds/readme","www.e-consul.info/limesurvey/","/futabadai/todo/");
#更新したくないファイルをここで指定する。"TMP_"と指定した場合は、ファイルに
#TMP_という文字列が含まれるファイルを全て無視する。完全一致で特定のファイルだけ
#更新を除外できる。大文字小文字は区別しない。

#設定はここまで#################################################################


#設定(プレフィクス)#############################################################

$DELIMITA = '_';	#!パターンファイル識別子

#エラーメッセージ###############################################################

$MSG{'pre_reload_msg'} = " 個のファイルを更新します。";
$MSG{'reload_end_msg'} = " 件の更新が終了しました。";
$MSG{'file_write_err_msg'} = " に書き込みが許可されていません。";
$MSG{'file_create_err_msg'} = " が作成できませんでした。";
$MSG{'file_open_err_msg'} = " が開けませんでした。<br>\n";
$MSG{'file_size_err_msg'} = " 書き込み失敗。ファイルサイズが０バイトです。\予\期\せぬエラーが発生しました。";
$MSG{'file_refresh_msg'} = " を更新しました。<br>\n";
$MSG{'file_changed_msg'} = " で内容を書き換えました。<br>\n";
$MSG{'file_changed_err_msg'} = "文字コードが不明なため変換を見送りました。<br>\n";
$MSG{'file_refresh_err_msg'} = " の更新ができませんでした。(パーミッションを666か606にして下さい)<br>\n";
$MSG{'file_no_exist_err_msg'} = " に読み込みが許可されていないか、存在しません。";
$MSG{'file_is_folder_err_msg'} = " はフォルダであるため開けませんでした。";
$MSG{'cmd_start_msg'} = "個のファイルを更新します。\n\n";
$MSG{'cmd_end_msg'} = "\nファイル更新が完了しました。\n";
$MSG{'Jcode_err_msg'} = "Jcode.pm モジュールが使えませんでした。<br>\nパスが通ってないか、Jcode.pm関連のファイルが存在しない可能性があります。";

#フォームの処理#################################################################

eval "use Jcode";
if($@){ &error( $MSG{'Jcode_err_msg'} ); }

&ReadParse(*in);
$command = $in{'cmd'};
unless($command) { $command = $ARGV[0]; }

#テンプレート関連################################################################

$SITEMAP_FILE = $SAVE_DIR . "sitemap";
$MSITEMAP_FILE = $SAVE_DIR . "msitemap";
$SITEMAP_FILE2 = ".xml";
$YAHOO_URLLIST_FILE = $SAVE_DIR . "urllist.txt";
$TEMP_REFRESH_DO_HTML = $SKIN_DIR . "TMP_refresh_do.html";
$TEMP_REFRESH_END_HTML = $SKIN_DIR . "TMP_refresh_end.html";
$TEMP_LIST_ERROR_HTML = $SKIN_DIR . "TMP_list_error.html";
$TEMP_DEFAULT_HTML = $SKIN_DIR . "TMP_default.html";
$TEMP_REFRESH_CONTINUE_HTML = $SKIN_DIR . "TMP_continue.html";
$FILELIST_TXT = $SAVE_DIR . "filelist.txt";
$SAVEFILE_TXT = $SAVE_DIR . "save.txt";
$ERROR_FILE = $SAVE_DIR . "err_";
$CHILD = ".txt";
$RETRY = 5;
$CONTENTS_TYPE = "text/html";
$CGI_NAME = $0;

#日付############################################################################

$ENV{'TZ'} = "JST-9";
$time = time();
($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($time);
$year += 1900;
$mon  += 1;
if($mon < 10){$mon = "0$mon";}
if($mday < 10){$mday = "0$mday";}
if($hour < 10){$hour = "0$hour";}
if($min < 10){$min = "0$min";}

$LASTMOD = "$year-$mon-$mday";
$LASTMOD2 = "$year-$mon-$mday" . "T" . "$hour:$min" . "+" . "00:00";

#サイトマップ###################################################################

$sitemap_limit = 10000;
$SITEMAP_HEAD = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";

$SITEMAP_HEAD2 = '<?xml version="1.0" encoding="UTF-8" ?>' . "\n" . ' <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">' . "\n";

$SITEMAP_TAIL = "  </urlset>\n";

#置き換えオプション#############################################################

$JCODE_FLAG = 0;
#文字コードが不明な時も強制的に置き換えるかどうか？
#1: 置き換える　0: 置き換えない
#1にすると$JCODE_TYPEで指定した文字コードで置き換えます。
#予めサーバー内の文字コードが判明している時に設定します。

$JCODE_TYPE = 1;
#置き換える文字コードを指定します。
#1〜3より選択。1:sjis 2:euc 3:utf8
#$JCODE_FLAG = 1;　の時に任意の文字コードで置き換えます。

################################################################################


	if($command eq 'refresh' or $command eq 'refresh_start')
	{

		if($command eq 'refresh_start')
		{
			unlink($SAVEFILE_TXT);
			unlink($FILELIST_TXT);
			unlink("err_list.txt");
		}

		if(-e $SAVEFILE_TXT and -e $FILELIST_TXT)
		{
			$SKIN = &READ_FILE($TEMP_REFRESH_CONTINUE_HTML,1);
			&SHOW_HTML($SKIN,$CONTENTS_TYPE);
			exit;
		}

		$SKIN = &READ_FILE($TEMP_REFRESH_DO_HTML,1);
		&SHOW_HTML($SKIN,$CONTENTS_TYPE);

		if(-e $FILELIST_TXT and !-s $FILELIST_TXT == 0)
		{
			@ALL_LIST = &READ_FILE($FILELIST_TXT);
			print join("<br>\n",@ALL_LIST);
		}
		else
		{
			@ALL_LIST = &DIR_SEARCH($BASE_DIR);
			&SAVE_DATA(1,$FILELIST_TXT,join("\n",@ALL_LIST));
		}

		&SAVE_DATA(1,$SAVEFILE_TXT,0);
		&MAKE_SITEMAP(@ALL_LIST);
		&PRINT_FOOTER($MSG{'pre_reload_msg'},@ALL_LIST);
		exit;

	}
	elsif($command eq 'refresh_do')
	{
		if(-e $SAVEFILE_TXT)
		{
			$SAVE_POINT = &READ_FILE($SAVEFILE_TXT,1);
		}
		else
		{
			&SAVE_DATA(1,$SAVEFILE_TXT,0);
			$SAVE_POINT = 0;
		}
		if(-e $FILELIST_TXT)
		{
			@ALL_LIST = &READ_FILE($FILELIST_TXT);
			&MAKE_SITEMAP(@ALL_LIST);
		}
		else
		{
			$SKIN = &READ_FILE($TEMP_LIST_ERROR_HTML,1);
			&SHOW_HTML($SKIN,$CONTENTS_TYPE);
			exit;
		}

		if($SAVE_POINT < 0 or $SAVE_POINT eq "")
		{
			$SAVE_POINT = 0;
		}

		$SKIN = &READ_FILE($TEMP_REFRESH_END_HTML,1);
		&SHOW_HTML($SKIN,$CONTENTS_TYPE);

		for ($i = $SAVE_POINT; @ALL_LIST > $i; $i++)
		{
			&REWRITE($ALL_LIST[$i],1);
			&SAVE_DATA(1,$SAVEFILE_TXT,$i);
		}

		&PRINT_FOOTER($MSG{'reload_end_msg'} , @ALL_LIST);

		unlink($SAVEFILE_TXT);
		unlink($FILELIST_TXT);
		exit;

	}
	elsif($command eq 'cron')
	{

		@ALL_LIST = &DIR_SEARCH($BASE_DIR);
		&MAKE_SITEMAP(@ALL_LIST);
		&Jcode'convert(\$MSG{'cmd_start_msg'}, 'euc');
		print $#ALL_LIST + 1 . $MSG{'cmd_start_msg'};

		for ($i =0; @ALL_LIST > $i; $i++)
		{
			&REWRITE($ALL_LIST[$i],2);
			&SAVE_DATA(1,$SAVEFILE_TXT,$i);
		}

		&Jcode'convert(\$MSG{'cmd_end_msg'}, 'euc');
		print $MSG{'cmd_end_msg'};

		exit;
	}
	else
	{

		$SKIN = &READ_FILE($TEMP_DEFAULT_HTML,1);
		&SHOW_HTML($SKIN,$CONTENTS_TYPE);

	}

	exit;


sub DIR_SEARCH
{

	my($src) = @_;
	my($target_file, $refresh_file, $flag, $no_file);

	opendir(DIN,$src) or &error("Can't open $src : $!");

	my(@dir) = grep !/^\.\.?$/, readdir(DIN);

	foreach(@dir)
	{
		$target_file = "$src/$_";
		$target_file =~ s/\/\//\//sgi;

		if(-d $target_file)
		{
			&DIR_SEARCH($target_file);
		}
		else
		{
			foreach $refresh_file (@REF_FILE)
			{
				if($target_file =~ /$refresh_file$/i)
				{
					if(-s $target_file == 0)
					{
						next;
					}

					$flag = 1;
					foreach $no_file (@NO_FILE)
					{
						if($target_file =~ /$no_file/i)
						{
							$flag = 0;
							last;
						}
					}

					if($flag)
					{
						$linked_target_file = $target_file;
						$linked_target_file =~ s/^$BASE_DIR/$DOMAIN/i;

						print "<a href=\"$linked_target_file\" target=\"_blank\">" . $linked_target_file . "</a><br>\n";
						push( @ALL_LIST, $target_file );
						last;
					}
				}
			}
		}
	}

	return @ALL_LIST;

}
sub SAVE_DATA
{

	my( $mode, $file_name, @DATA ) = @_;
	my( $date, $wrt_mode, $lock_file );

	if ($mode == 1)		{	 $wrt_mode = ">";	}
	elsif($mode == 2)	{	$wrt_mode = ">>";	}
	elsif($mode == 3)	{	$wrt_mode = "+>";	}
	else				{	$wrt_mode = ">";	}

	if( -e $file_name )
	{
		unless( -w $file_name )
		{
			&error( $MSG{'file_write_err_msg'} );
		}
	}

	if ( open ( NEW, $wrt_mode . $file_name) and $#DATA ne "")
	{
		binmode NEW;
		print NEW @DATA;
		close(NEW);
		return true;
	}
	else
	{
		&error( $MSG{'file_create_err_msg'} );
		exit;
	}

}
sub REWRITE
{

	my($target_file,$output) = @_;
	my($roop,$file_size,$LINE,$PAT_DATA,$linked_target_file);
	my($pat_file,$pat_change_file,$pat_file_name,$change_flag);

	unless(-e $target_file)
	{
		return;
	}

	$file_size = -s $target_file;
	$LINE = &READ_FILE($target_file,1);

	if($LINE ne "" and $file_size)
	{
		if( $PAT_FLAG )
		{
			opendir( DIN , $PAT_DIR ) or &error("Can't open $PAT_DIR : $!");
			my(@dir) = grep !/^\.\.?$/, readdir(DIN);

			foreach( @dir )
			{
				$pat_file_name = $_;
				$pat_file = "$PAT_DIR/$_";
				$pat_file =~ s/\/\//\//sgi;

				if(-e $pat_file and $pat_file =~ /.*\w$DELIMITA\w.*/ )
				{

					$PAT_DATA = "";
					$PAT_DATA = &READ_FILE($pat_file,1);

					$PAT_CHANGE_DATA = "";
					($pat_change_file) = split(/$DELIMITA/ , $pat_file_name);
					local($dummy , $pat_file_child ) = split(/\./ , $pat_file_name);

					if($pat_file_child)
					{
						$pat_change_file .= "." . $pat_file_child;
					}

					$pat_change_file = "$PAT_DIR/$pat_change_file";
					$pat_change_file =~ s/\/\//\//sgi;

					if(-e $pat_change_file )
					{
						$PAT_CHANGE_DATA = &READ_FILE($pat_change_file,1);
					}

					$change_flag = "";

					if( $PAT_DATA )
					{
						if( &Jcode'getcode($LINE) eq 'euc' )
						{

							&Jcode'convert(\$PAT_DATA, 'euc');
							&Jcode'convert(\$PAT_CHANGE_DATA, 'euc');
							$PAT_DATA = quotemeta($PAT_DATA);

							if( $LINE =~ s/$PAT_DATA/$PAT_CHANGE_DATA/sg )
							{
								$change_flag = " $pat_change_file" . $MSG{'file_changed_msg'};
							}
						}
						elsif( &Jcode'getcode($LINE) eq 'sjis' )
						{
							&Jcode'convert(\$PAT_DATA, 'sjis');
							&Jcode'convert(\$PAT_CHANGE_DATA, 'sjis');
							$PAT_DATA = quotemeta($PAT_DATA);

							if( $LINE =~ s/$PAT_DATA/$PAT_CHANGE_DATA/sg )
							{
								$change_flag = " $pat_change_file" . $MSG{'file_changed_msg'};
							}
						}
						elsif( &Jcode'getcode($LINE) eq 'utf8' )
						{
							&Jcode'convert(\$PAT_DATA, 'utf8');
							&Jcode'convert(\$PAT_CHANGE_DATA, 'utf8');
							$PAT_DATA = quotemeta($PAT_DATA);

							if( $LINE =~ s/$PAT_DATA/$PAT_CHANGE_DATA/sg )
							{
								$change_flag = " $pat_change_file" . $MSG{'file_changed_msg'};
							}
						}
						elsif( &Jcode'getcode($LINE) eq 'ascii' )
						{
							if($JCODE_FLAG and $JCODE_TYPE)
							{
								&Jcode'convert(\$PAT_DATA, $JCODE_TYPE);
								&Jcode'convert(\$PAT_CHANGE_DATA, $JCODE_TYPE);
								$PAT_DATA = quotemeta($PAT_DATA);

								if( $LINE =~ s/$PAT_DATA/$PAT_CHANGE_DATA/sg )
								{
									$change_flag = " $pat_change_file" . $MSG{'file_changed_msg'};
								}
							}
							else
							{
								$change_flag = $MSG{'file_changed_err_msg'};
							}
						}
					}
				}
			}
		}

		open(ADD, "> $target_file");
		binmode ADD;
		print ADD $LINE;
		close(ADD);

		for($roop = 0; $roop < $RETRY; $roop++)
		{
			if($file_size == 0)
			{
				sleep(1);

				open(ADD, "> $target_file");
				binmode ADD;
				print ADD $LINE;
				close(ADD);

				sleep(1);

				&SAVE_DATA(1,"$ERROR_FILE$target_file$CHILD",$LINE);
			}
			else
			{
				last;
			}

		}

		if($file_size == 0)
		{
			&error( $MSG{'file_size_err_msg'} );
		}
	}

	$linked_target_file = $target_file;
	$linked_target_file =~ s/^$BASE_DIR/$DOMAIN/i;

	if($output == 1 and $target_file and -w $target_file)
	{
		print "<a href=\"$linked_target_file\" target=\"_blank\">" . $linked_target_file . '</a>' . $MSG{'file_refresh_msg'} . $change_flag;
	}
	elsif($output == 2 and $target_file and -w $target_file)
	{
		&Jcode'convert(\$MSG{'file_refresh_msg'}, 'euc');
		print $linked_target_file . $MSG{'file_refresh_msg'} . $change_flag;
	}
	else
	{
		if($output == 1)
		{
			print "<a href=\"$linked_target_file\" target=\"_blank\">" . $linked_target_file . '</a>' . $MSG{'file_refresh_err_msg'};
		}
		elsif($output == 2)
		{
			&Jcode'convert(\$MSG{'file_refresh_err_msg'}, 'euc');
			print $linked_target_file . $MSG{'file_refresh_err_msg'};
		}

		&SAVE_DATA(2,"err_list.txt","$target_file,$linked_target_file\n");
	}

	return $target_file;

}
sub READ_FILE
{

	my($file,$mode) = @_;
	local($/);

	my($LINE,@LINE,$i);

	unless(-r $file)
	{
		&error( $file . $MSG{'file_no_exist_err_msg'} );
	}

	if($mode == 1)
	{
		undef $/ ;
		unless(-d $file)
		{
			open(IN,$file) or &error( $file . $MSG{'file_open_err_msg'} );
			$LINE = <IN>;
			close(IN);
			return $LINE;
		}
		else
		{
			&error( $file . $MSG{'file_is_folder_err_msg'} );
		}

		$/ = "\n";
	}
	else
	{
		$/ = "\n";
		unless(-d $file)
		{
			open(IN,$file) or &error( $file . $MSG{'file_open_err_msg'});
			@LINE = <IN>;
			close(IN);

			foreach (@LINE)
			{
				$_ =~ s/[\r\n]*$//;
			}

			return @LINE;
		}
		else
		{
			&error( $file . $MSG{'file_is_folder_err_msg'} );
		}
	}

}
sub CHANGE_PARAM
{
	my($target,$SKIN,$change_value) = @_;
	my(@change_value);

	if($target ne "" and $SKIN ne "" and $change_value ne "")
	{
		if(ref($change_value) eq 'ARRAY')
		{
			@change_value = @$change_value;
			$change_value = join("\n",@change_value);
			$SKIN =~ s/$target/$change_value/sg;
		}
		else
		{
			$SKIN =~ s/$target/$change_value/sg;
		}
	}

	return $SKIN;
}
sub MAKE_SITEMAP
{

	my(@ALL_LIST) = @_;

	@SITEMAP = ();
	@MSITEMAP = ();
	@URLLIST = ();
	$SITEMAP = "";
	$MSITEMAP = "";
	$MAP = "";
	$sitemap = "";

	$SITEMAP  = "   <url>\n";
	$SITEMAP .= "    <loc>$DOMAIN</loc>\n";
	$SITEMAP .= "    <lastmod>$LASTMOD</lastmod>\n";
	$SITEMAP .= "    <changefreq>daily</changefreq>\n";
	$SITEMAP .= "    <priority>1.0</priority>\n";
	$SITEMAP .= "   </url>\n";

	$MSITEMAP  = "   <url>\n";
	$MSITEMAP .= "    <loc>$DOMAIN</loc>\n";
	$MSITEMAP .= "    <lastmod>$LASTMOD2</lastmod>\n";
	$MSITEMAP .= "   </url>\n";





	push(@SITEMAP,$SITEMAP);
	push(@MSITEMAP,$MSITEMAP);


	foreach $url (@ALL_LIST)
	{
		$url =~ s/(^$BASE_DIR)/$DOMAIN/sgi;

		$SITEMAP  = "   <url>\n";
		$SITEMAP .= "    <loc>$url</loc>\n";
		$SITEMAP .= "    <lastmod>$LASTMOD</lastmod>\n";
		$SITEMAP .= "    <changefreq>daily</changefreq>\n";
		$SITEMAP .= "    <priority>0.5</priority>\n";
		$SITEMAP .= "   </url>\n";

		$MSITEMAP  = "   <url>\n";
		$MSITEMAP .= "    <loc>$url</loc>\n";
		$MSITEMAP .= "    <lastmod>$LASTMOD2</lastmod>\n";
		$MSITEMAP .= "   </url>\n";


		push(@SITEMAP,$SITEMAP);
		push(@MSITEMAP,$MSITEMAP);
		push(@URLLIST,$url);

	}

	$i = 0;
	$s = "";

	foreach $map (@SITEMAP)
	{
		$MAP .= "$map\n";

		if($i >= $sitemap_limit)
		{
			$MAP = $SITEMAP_HEAD . $MAP;
			$MAP = $MAP . $SITEMAP_TAIL;
			$sitemap = $SITEMAP_FILE . $s . $SITEMAP_FILE2;
			open(ADD, "> $sitemap") or push(@RESULT,"NO SAVE:$sitemap\n");
			print ADD $MAP;
			close(ADD);
			$MAP = "";
			$s++;
			$i = 0;
		}

		$i++;
	}

	if($#SITEMAP < $sitemap_limit)
	{
		$MAP = $SITEMAP_HEAD . $MAP;
		$MAP = $MAP . $SITEMAP_TAIL;
		$sitemap = $SITEMAP_FILE . $s . $SITEMAP_FILE2;
		open(ADD, "> $sitemap") or push(@RESULT,"NO SAVE:$sitemap\n");
		print ADD $MAP;
		close(ADD);
	}



	$i = 0;
	$s = "";

	foreach $mmap (@MSITEMAP)
	{
		$MMAP .= "$mmap\n";

		if($i >= $sitemap_limit)
		{
			$MMAP = $SITEMAP_HEAD2 . $MAP;
			$MMAP = $MMAP . $SITEMAP_TAIL;
			$sitemap = $MSITEMAP_FILE . $s . $SITEMAP_FILE2;
			open(ADD, "> $sitemap") or push(@RESULT,"NO SAVE:$sitemap\n");
			print ADD $MMAP;
			close(ADD);
			$MMAP = "";
			$s++;
			$i = 0;
		}

		$i++;
	}

	if($#MSITEMAP < $sitemap_limit)
	{
		$MMAP = $SITEMAP_HEAD2 . $MMAP;
		$MMAP = $MMAP . $SITEMAP_TAIL;
		$sitemap = $MSITEMAP_FILE . $s . $SITEMAP_FILE2;
		open(ADD, "> $sitemap") or push(@RESULT,"NO SAVE:$sitemap\n");
		print ADD $MMAP;
		close(ADD);
	}

	open(ADD, "> $YAHOO_URLLIST_FILE") or push(@RESULT,"NO SAVE:$YAHOO_URLLIST_FILE\n");
	print ADD join("\n",@URLLIST);
	close(ADD);

}
sub SHOW_HTML
{
	my($SKIN,$CONTENT_TYPE) = @_;
print "Content-type: $CONTENT_TYPE\n\n";
print <<"EOF";
$SKIN
EOF
}
sub PRINT_FOOTER
{
	my($msg,@ALL_LIST) = @_;

	if($msg and @ALL_LIST)
	{
		print "<br>\n";
		print $#ALL_LIST + 1 . $msg;
	}
	elsif($msg)
	{
		print "<br>\n";
		print $msg;
	}

	print "</body>\n";
	print "</html>\n";
}
sub error
{
	my($error_message) = @_;

	print "Content-type: text/html\n\n";
	print <<"EOF";
	<html>
	<head>
	<title>エラー</title></head>
	<body>
$error_message
	</body>
	</html>
EOF
exit;
}
