# ローカル用安易リンクチェッカ(平成18年10月 2日)。 # 平成18年10月 2日 さいたま・しらぎくさいと # (c)2006 Marguerite Site, Saitama, Japan. # www.marguerite.jp unlink ('__ERR.txt'); $ERRN=''; $cdir=''; $cdir2=''; proc(); print "===== Completed!!\n"; if ($ERRN) { open (F,'>__ERR.txt'); print F $ERRN; close(F); print "ERROR(S) FOUND!!\n"; } print "\n"; for (;;) {} sub proc { local *DIR; local *F; local *D; my %TBL=(); opendir (DIR,"."); my @d=readdir(DIR); foreach $n (@d) { if (!$n) { next; } if ($n=~/\A[\-\w]+\Z/) { chdir("./$n"); $cdir2.='../'; $cdir.="/$n"; &proc(); chdir("../"); $cdir2=substr($cdir2,3); $cdir=~s/\/$n\Z//; next; } unless ($n=~/\.s?html?\Z/) { next; } open (F,$n); $i=''; while () { $i="$i$_"; } close (F); $F=''; $i=~s/<\!--.*?-->//sg; while ($i=~s/\A.*?<(?:a|img|link|script|object) ([^>]*)>//is) { $t=" $1"; next if !($t=~/ (?:src|href|data)="\s*([^"]*?)\s*"/); $t=$1; $t=~s/\#.*?\Z//; $t=~s/\?.*?\Z//; next if $t eq ''; next if ($t=~m!\Ahttps?://|\Aftp://|\Amailto:|\Ajavascript:|\Aurn:!); $t2="./$t"; $t2=~s|\A\./(\./)+|\./|; if ($t2=~m|/\.?/|) { $ERRN.="$cdir/$n\t *** $t Illegal Format. ***\n"; $F='#'; next; } next if ($TBL{$t}>0); if (!$TBL{$t}) { $TBL{$t}=1; @ttt=split(m|/|,$t2); $x=-1; $ddd=''; while (++$x<$#ttt) { if ($x>0) { $ddd.='/'; } $ddd.=$ttt[$x]; opendir(D,$ddd); @dd=readdir(D); closedir(D); $flg=''; $h=$ttt[$x+1]; foreach $g (@dd) { if ($g eq $h) { $flg=$g; last; } } if ($flg eq '') { $TBL{$t}=-1; last; } } } next if ($TBL{$t}>0); $ERRN.="$cdir/$n\t *** $t Not Found. ***\n"; $F='#'; } print "$cdir/$n $F\n"; } return; }