class Log { private $path = '/logs/'; //資料夾路徑 public function write($message, $fileSalt) { $date = new DateTime(); //現在時間 $log = $this->path . $date->format('Y-m-d') . "-" . hash('sha512',$date->format('Y-m-d') . $fileSalt) . ".txt"; //檔案位置,使用日期與識別碼做SHA512當做檔名 if (is_dir($this->path)) { //判斷檔案資料夾是否存在 if (!file_exists($log)) { //判斷檔案是否存在 $fh = fopen($log, 'a+') or die("Fatal Error !"); //建立文件 $logcontent = "Time : " . $date->format('H:i:s') . "\r\n" . $message . "\r\n"; //要存的文字 fwrite($fh, $logcontent); //寫入 fclose($fh); //關閉 } else { //如果存再,就用覆寫的方式edit() $this->edit($log, $date, $message); } } else { //資料夾不存在,所以建立資料夾後,再次呼叫write() if (mkdir($this->path, 0777) === true) { $this->write($message, $fileSalt); } } } private function edit($log, $date, $message) { $logcontent = "Time : " . $date->format('H:i:s') . "\r\n" . $message . "\r\n\r\n"; //要記錄得文字 $logcontent = $logcontent . file_get_contents($log);//添加在最前面 file_put_contents($log, $logcontent); //上傳 } }
建立一個 log.php 把以上程式放進去。
記錄的檔案名稱使用亂碼建立的原因是因為,該檔案可能是公開的位置,
因為先前提供記錄給某些監控軟體判斷是否有錯誤訊息的出現,所以以難以猜測的檔名,並且每周清除為規則,一般人無法簡易猜測到檔案名稱,所以也無法查看。
當然,可以將記錄放在網站外,讓網址連結是無法連結到檔案,才是最好的處理辦法。
使用方式如下:
include("log.php"); $log = new Log(); $log->write("使用者手殘,按錯。", "BeanCode");
如果還有什麼建議與哪裡規劃的不好,歡迎提供意見唷。
其他PHP文章