datafilename = $_datafilename; $this -> datafilepath = $_datafilepath; $this -> lockfilename = $_datafilepath.$_datafilename.".lock"; } //----- ログの表示 function view($_datestr = ""){ if ($_datestr == "") $_datestr = date("Ymd"); $_filename = $this -> datafilepath.$this -> datafilename.$_datestr.$this -> datafileext; if (file_exists($_filename)) { $_fp = fopen($_filename,"r"); } else { $this -> errormessage = "logfile not found."; return false; } $i = 1; while ($data = fgets($_fp,1000)){ print $i.":".$data."
\n"; ++$i; } fclose($_fp); return true; } //----- ログ保存 function write() { $_ref = getenv("HTTP_REFERER"); $_rhost = @gethostbyaddr(getenv("REMOTE_ADDR")); // 無視リモホからのアクセスはパス for ($i=0;$iremotehostx);$i++){ if (ereg($this->remotehostx[$i],$_rhost)){ $this -> errormessage = "ignore remote host"; return false; } } //同一ファイルチェック if($_ref != ""){ $url_a = getenv("HTTP_HOST").getenv("SCRIPT_NAME"); //実行URL if(ereg($url_a,$_ref)){ $this->errormessage = "same file."; return false; } } //----- ログのデータ化 $_log = getenv("SCRIPT_NAME").",".time().",".getenv("REMOTE_ADDR").",".strtr(getenv("HTTP_USER_AGENT"),',',' ').",".getenv("HTTP_REFERER").",".$_rhost."\n"; //----- ファイルのロック $_lockfp = fopen($this -> lockfilename,"w"); flock($_lockfp, LOCK_EX); //----- ログの書き出し $_filename = $this->datafilepath.$this->datafilename.date("Ymd").$this->datafileext; $_fp = fopen($_filename,"a"); if (!$_fp) { $this->errormessage = "file cannot open."; $ret_code = false; } else { fputs($_fp,$_log); fclose($_fp); @chmod($_filename,0666); $ret_code = true; } //----- ロックの解除 flock($_lockfp, LOCK_UN); fclose($_lockfp); unlink($this->lockfilename); return $ret_code; } }; ?>