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

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

조회 833회 댓글 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;
    }
  }
 


  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
전체 206건 1 페이지
  • profile_image PHP에서 변수나 함수명을 한글로 작성하는 것은 몇가지 참고 할게 있으니 아래를 보고 해당 되는것이 있는지 보면 됩니다.utf-8 사용해야 되는데 요즘은 보통 이것 사용하기 때문에 문제 될것은 없을것 같습니다.확실한것은 영어에 익숙하지 않은 경우 한글을 필요시 섞어쓰는것은 가독성이 무척 좋다는 것입니다.변수명을 만들기 위해서 gpt에게 물어보는 시간도 줄어들고(내가 만드는것보다 좋기 때문에 그렇죠)아래 주의할점(나쁜점)에 해당하지 않는 경우는 사용해도 문제 될것은 없다고 봅니다. 프로그램의 용도에 따라 다르겠지만 문제 될까봐 영어로 사용해야 된다는 고정관념은 버리는것이 더 좋다는 것입니다.   ● 좋은점- 코드의 의미를…
  • profile_image dll 파일명은 gd2가 아니라 gd로 되어 있는데 샘플의 php.ini 에선 gd2로 되어 있는 경우가 있습니다.이런 경우는 파일명에 맞게 gd로 변경해 주면 됩니다.php.ini 에서 extension=fileinfoextension=gd제 경우는 윈도우환경에서 이런 문제가 있었습니다. 
  • profile_image 파일 구조가 복잡한 경우 어디서 어떤 프로그램이 include(포함) 되어 있는지 찾기 힘든 경우가 있습니다.이런 경우는 최종적으로 읽혀지는 파일에 전체 include 되는 목록을 출렧하면 되는데요. 프로그램은 아래와 같습니다.이렇게 하면 어느파일이 include 되는지 알 수 있습니다.  $allowed_ip = '222.111.222.123';  $user_ip = $_SERVER['REMOTE_ADDR'];  if ($user_ip == $allowed_ip) {    // 포함된 파일 목록을 배열로 반환    $included_files = get_included_files();    // 포함된 파일 목록 출력…
  • profile_image 파싱을 제대로 해야 하는데 잘 안될때가 있는데 그런경우 사용하는 방법중 하나 입니다.전체를 출력하고 그곳에서 필요한 부분만 사용을 하는데 보통 링크 같은 경우는 이렇게 해도 큰 문제가 되지 않습니다. 프로그램을 잘 한다는것은 문제 해결을 잘 한다는 것입니다.문제 해결을 잘하는 사람은 코딩도 잘하는 편이지만 약간 다를 수 있기도 합니다.한번 사용하면 그만인 프로그램을 만들때는 빠르게 처리하여 마무리하는것이 제일 좋은 방법이겠습니다.    $dom = new DOMDocument('1.0', 'UTF-8');    @$dom->loadHTML($html);    $xpath = new DOMXPath($dom);   …
  • profile_image 많은 문자열에서 비교할때 문자열의 글자길이가 짧은것인 긴것안에 포함 되어 체크 할때 문제가 발생하는 경우가 있는데 사람 같이 지능이 있는 경우 비교할때 판단을 할 수 있지만 프로그램은 그렇지 못하기 때문에 비교 순서를 글자길이가 긴것을 먼저 비교하면 좋아지는 경우가 있는데 이런 경우 사용하는 방법 입니다.  if ( $MODE == 'test' ) {    $aString    = ['한글' => 1, '국어공부' => 2, '산수틀' => 1, '노력하기중' => 2];    print_r($aString);    uksort($aString, function($a, $b) {        re…
  • profile_image 아파치 로그에서 특정페이지(URL) 호출의 횟수를 알아봐야 하는 경우 아래 프로그램을 자신의 환경에 맞게 수정하여 사용하면 됩니다.그리고 저 같은 경우 로그의 갯수가 몇만개 밖에 안되서 문제 되지 않지만 더 많을 경우 1차 2차 필터링 과정을 거치는 방식을 사용해서 처리 해야 하는것 참고하 주세요.기본 방식이 중요하기 때문에 아래를 응용해서 사용하면 됩니다.  $urlCounts = [];  while ($line = fgets(STDIN)) {      if (preg_match('/^.*"GET ([^"]+) HTTP/', $line, $matches)) {          $url = urldecode($match…
  • profile_image 프로그램이 멈추는 경우도 있기 때문에 이런 경우는try {} catch {} 로 잡아서 멈추지 않게 처리 해야 합니다. ● 오류 로그와 관련하야 PHP 8 에서 중요한 부분은 아래와 같습니다.- 에러 출력을 위한 설정 - 반드시 로그를 남기는 것이 있어야 화면에 출력이 되질 않는다.- 그리고 예외처리 해서 잡은 것은 당연하게 echo 찍은 것이면 화면에 출력이 된다. 그렇기 때문에 웹사이트 제작시에는 적합하지 않기 때문에 함수 안에서 오류를 돌려 주고 필요한 경우만 출력하게 해야 합니다.     # error 출력을 위한 설정 - 반드시 로그를 남기는 것이 있어야 화면에 출력이 되질 않는다.    ini_set('dis…