[PHP] 以PHP 自定義 log(記錄) -日區分

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文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *