방문자 로그파일 저장용 함수
방문자의 출처 및 현재 페이지를 저장하기 위한 함수 입니다.
페이지가 있는 페이지의 경우는 1페이만 저장해도 되는경우가 많습니다.
방문자가 적은 사이트면 처리하는 부하가 많이 않으니 모두 저장하는것이 더 좋습니다. 생각보다 용량 많이 차지 하지 않습니다.
단, 웨봇이나 클롤러의 경우는 필요하지 않으니 제외하는것이 좋겠습니다.
아래는 출처와 키워드가 있을 경우 저장하는 함수 입니다.
/**
* user visit log write
*
* @param string $type
* @param string $keyw
* @param string $logFile
* @return int|false
*/
function logUserSearchPageVisit( string $type='', string $keyw, string $logFile='' )
{
$aDelChar = ["\t", "\r", "\n"];
$keyword = str_replace($aDelChar, '', $keyw);
$user_agent = str_replace($aDelChar, '', $_SERVER["HTTP_USER_AGENT"]);
$ref_url = str_replace($aDelChar, '', $_SERVER["HTTP_REFERER"]);
$page_url = $_SERVER["REQUEST_SCHEME"] . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$user_ip = $_SERVER["REMOTE_ADDR"];
$aCsvLog = array();
$aCsvLog[] = date('Y-m-d H:i:s');
$aCsvLog[] = $type;
$aCsvLog[] = $keyword;
$aCsvLog[] = $user_ip;
$aCsvLog[] = $user_agent;
$aCsvLog[] = $page_url;
$aCsvLog[] = $ref_url;
$csvData = '"' . implode('","', $aCsvLog) . '"' . "\n";
//echo "$csvData \n";
// exit;
$wrtSize = 0;
$logFile = sanitizeInput($logFile);
if ( strlen($logFile) < 10 ) {
$wrtDir = "/www/log/" . date('Y');
if ( !is_dir($wrtDir) && !mkdir($wrtDir, null, true) ) {
return $wrtSize;
}
$logFile = "$wrtDir/apache_" . date('Ym') . '.log';
}
$wrtSize = customFilePutContents($logFile, $csvData, FILE_APPEND);
return $wrtSize;
}
// 특수 문자 제거
function sanitizeInput($input) {
return preg_replace('/[^a-zA-Z0-9_\-\.]/', '', $input);
}
function customFilePutContents($filePath, $data, $flags = FILE_APPEND) {
try {
$result = file_put_contents($filePath, $data, $flags);
// if ($result === false) {
// throw new Exception("Failed to write to file: $filePath");
// }
return $result;
} catch (Exception $e) {
// error_log($e->getMessage());
return false;
}
}