방문자 로그파일 저장용 함수 > PHP
PHP

방문자 로그파일 저장용 함수

조회 37회 댓글 0건

방문자의 출처 및 현재 페이지를 저장하기 위한 함수 입니다.

페이지가 있는 페이지의 경우는 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;
    }
  }
 


  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
전체 183건 1 페이지
  • profile_image 리눅스 환경에서 쉘에서 PHP를 실행하는 방법은 여러 가지가 있습니다.cron 스케줄에 넣어 사용해야 되는 경우 유용 하죠~선호 하는 방법은 php 전체 경로로 지정하는 첫번째 방식이 후에 php 버전이 변경 되었을때 대응하기가 더 편한 부분이 있습니다.● CLI(Command Line Interface) 방식 실행PHP CLI는 커맨드 라인에서 PHP 스크립트를 실행하기 위한 모드로서 직접 PHP를 실행하려면, 터미널에서 다음과 같이 명령어를…
  • profile_image 컴포저로 다운로드 받고 autoload 사용하기 위해서 설치 하려는데 잘 안되었던 부분 없애고 잘 된 부분만 정리해서 올립니다.최신 버전을 사용하시는 분은 이렇게 까지 할 필요는 없고 보통 기본으로 설치 되어 있습니다.여기서 php 경로를 지정해야 될 수 있습니다. 자신의 서버 환경에 맞게 지정하면 됩니다.1) 각 버전별 컴포저 다운로드 받기오래된 버전이라서 최근것을 사용하면 문제가 발생 할 수 있기 때문에 5.4 버전에 맞는 버전을 찾아 설치…
  • profile_image 파일은 없는데 아래와 같은 형태로 읽혀 들이는 것이 있다면 pear이 설치 되어 있는지 확인해 봐야 한다. 아래쪽에 보면 find명령으로 찾는것이 있으니 참고하면 된다. require_once 'PEAR.php';그래서 이 프로그램은 어떤 프로그램인가 궁금할 수도 있는데 예를 들면 아래와 같은 mime 처리 해주는 라이브러리가 있는데 PEAR.php 기반 위에 만들어진것이다.즉 PEAR.php 땅 위에 mime가 올라가 있는것이라 생각하면 된다…
  • profile_image 처음 배울때 만들어 보는 것중 하나 입니다. 삼각형은 중앙에 정렬된 별로 구성되어 있으며, 각 줄의 별의 수는 1, 3, 5로 증가합니다. 각 줄마다 양쪽에 적절한 수의 공백이 필요합니다. 이를 위해 다섯 가지 방법으로 구현된 메소드를 갖는 클래스를 작성의 예 입니다.    <?php  class CenteredTrianglePrinter {      // 첫 번째 방법: 중앙 정렬 반복문 사용      public function pri…
  • profile_image "Malformed UTF-8 characters, possibly incorrectly encoded" 오류는 PHP가 JSON 데이터를 디코딩하려고 시도할 때, 그 데이터가 올바른 UTF-8 형식이 아니라고 판단했을 때 발생하는데 비 UTF-8 문자나 이진 데이터가 JSON 문자열에 포함되어 있을 때 일어난다. 웹에서 긁어서 복사해온 경우 2바이트로 처리 되거나 그런것들이 있는데 잘 보세요. 한글도 없는데 문제가 생기는 경우는 작은 따음…
  • profile_image PHP에서 "Cannot use a scalar value as an array"라는 오류 메시지는 스칼라 값(정수, 부동소수점 수, 문자열 또는 불리언)을 배열처럼 사용하려고 시도할 때 발생합니다. 아래에는 이 오류가 발생하는 두 가지 예시를 들어 보겠습니다.1. 일반적인 절차형 코드    $var = "Hello, World!";  $var[1] = "a"; // 이 라인에서 오류가 발생합니다.위의 코드에서는 문자열 $var에 배열 인덱스를…