테스트 사이트 - 개발 중인 베타 버전입니다

검색어 검색기 구글과 네이트 먹통 채택완료

대한사랑 1년 전 조회 2,639

검색어 검색기 소스에서 구글과 네이트가 먹통입니다

 

어디를 수정해야 할까요?

 

고수님들 부탁드립니다

 

</p>

<p><?

// 외부 유입 검색어 분석기

// SearchQuery by mahler83 Ver 1.21 UTF-8

// A plugin for GNU board 4.31.02

// Released at 2009-07-29

// Please give feedbacks to <a href="http://bomool.net/" target="_blank" rel="noopener noreferrer">http://bomool.net/</a>

include_once("./_common.php");

$g4[title]="검색어 분석기";

include_once("$g4[path]/_head.php");</p>

<p>// 날짜 설정

if(!$datefrom) $datefrom = date("Y-m-d", strtotime("6 days ago"));

if(!$dateto) $dateto = $g4[time_ymd];</p>

<p>// 주사 지랄 방지

$datefrom = substr($datefrom, 0, 10);

$dateto = substr($dateto, 0, 10);

$site = substr($site, 0, 10);

$site_ori = $site;</p>

<p>// 검색사이트들

$site_arr = array("Google", "Nate", "Yahoo", "Daum", "Naver", "Bing");

$surl_arr = array("Google" => "<a href="http://www.google.%"," target="_blank" rel="noopener noreferrer">http://www.google.%",</a> "Nate" => "%nate.com%", "Yahoo" => "%search.yahoo.com%", "Daum" => "%search.daum.net%", "Naver" => "%search.naver.com%", "Bing" => "<a href="http://www.bing.com%");" target="_blank" rel="noopener noreferrer">http://www.bing.com%");</a>

$svar_arr = array("Google" => "q", "Nate" => "q", "Yahoo" => "p", "Daum" => "q", "Naver" => "query", "Bing" => "q");

?>

<style type="text/css">

#m3tbl { border:solid 1px #CCC; border-collapse:collapse;}

#m3tbl th { border:solid 1px #CCC; text-align:center;}

#m3tbl td { border:solid 1px #CCC; text-align:center; padding:2px 8px;}

#div_m3sq ul { display:inline; padding:0; margin:0; }

#div_m3sq ul li { display:inline; padding:0 10px; border:solid 1px #CCC; }

</style></p>

<p><div id="div_m3sq">

<h2>외부 유입 검색어 분석기</h2>

<ul>

<li><a href="<?=$PHP_SELF?>?dateto=<?=$dateto?>&datefrom=<?=$datefrom?>">All</a></li>

<? foreach($site_arr as $site) { ?>

<li><a href="<?=$PHP_SELF?>?site=<?=$site?>&dateto=<?=$dateto?>&datefrom=<?=$datefrom?>"><?=$site?></a></li>

<? } ?>

</ul>





</p>

<p><form method="get" action="<?=$_SERVER[PHP_SELF]?>">

    <input type="hidden" name="site" value="<?=$site_ori?>" />

    시작 : <input type="text" name="datefrom" value="<?=$datefrom?>" size="10" />

    끝 : <input type="text" name="dateto" value="<?=$dateto?>" size="10" />

    <input type="submit" value="go" />


</form>


<form action="javascript:;" onsubmit="findsq(getElementById('sq').value)" />

    결과내 검색 : <input type="text" id="sq" name="sq" value="<?=$sq?>" />

    <input type="submit" value="search" />

    <input type="button" value="reset" onclick="resetsq()" />

    <span id="search_cnt"></span>


</form>


</p>

<p><?

// vi_referer에서 사이트 찾고, vi_date로 범위 정하기, 정렬은 vi_id 역순 (속도 개선 필요)

if(in_array($site_ori, $site_arr)) {

    $where1 = "vi_referer LIKE '{$surl_arr[$site_ori]}' ";

}

else { // 5개 사이트 모두 포함

    $where1 = " ( ";

    foreach($surl_arr as $site => $surl) {

        $where1 .= " vi_referer LIKE '$surl' OR ";

    }

    $where1 .= " 0 )";

}</p>

<p>$query = sql_query("select * from `$g4[visit_table]` where $where1 AND vi_date>='$datefrom' AND vi_date<='$dateto' order by vi_id desc");

?>

<table id="m3tbl">

<tr><th width="150">날짜</td>

    <th width="150">사이트</td>

    <th width="400">검색어</td>

</tr>

<?

$cnt = 0;

$cnt2 = array();

while($row = sql_fetch_array($query)) {

    // 어느 사이트인지 찾기

    foreach($surl_arr as $site => $surl) {

        if(strstr($row[vi_referer], str_replace("%", "", $surl))) {

            $engine = $site;

            break;

        }

    }

    // 검색문자열 찾기

    $regex = "/(\?|&){$svar_arr[$engine]}\=([^&]*)/i";

    preg_match($regex, $row[vi_referer], $matches);

    $querystr = $matches[2];

    // 보통 검색어 사이를 +로 넘긴다

    $querystr = str_replace("+", " ", $querystr);

    // %ab 이런 식으로 된 걸 바꿔주기

    $querystr = urldecode($querystr);

    // 네이버는 unicode로 된 경우도 있어서

    if($engine=="Naver") $querystr = utf8_urldecode($querystr);

    // 캐릭터셋이 EUC-KR인 경우는 UTF-8로 고치기 (EUC-KR 유저는 UTF-8과 EUC-KR를 서로 바꿔주면 될 듯)

    $charset = mb_detect_encoding($querystr, "ASCII, UTF-8, EUC-KR");

    if($charset=="EUC-KR") $querystr = iconv("EUC-KR", "UTF-8", $querystr);

    // 자잘한 처리들

    $querystr = trim($querystr);

    $querystr = htmlspecialchars($querystr);

    

    // 가끔 빈 것들도 있다 -_-

    if(!strlen($querystr)) continue;

    // 에코

    echo "<tr><td>$row[vi_date]</td>";

    echo "<td><a href=\"$PHP_SELF?site=$engine\"><img src=\"$g4[path]/image/".strtolower($engine).".jpg\" /></a></td>";

    echo "<td style=\"text-align:left\" id=\"m3sqtd[$cnt]\"><a href=\"$row[vi_referer]\" target=\"_blank\">$querystr</a></td></tr>\n";

    // 카운트용 변수

    $cnt++;

    $cnt2[$engine]++;

}

ksort($cnt2);</p>

<p>// 베짱이님 제공 함수

function utf8_urldecode($str, $chr_set='CP949') {

    $callback_function = create_function('$matches, $chr_set="'.$chr_set.'"', 'return iconv("UTF-16BE", $chr_set, pack("n*", hexdec($matches[1])));');

    return rawurldecode(preg_replace_callback('/%u([[:alnum:]]{4})/', $callback_function, $str));

} </p>

<p>?>

</table>


Total : <?=$days=(strtotime($dateto)-strtotime($datefrom))/(24*60*60)+1?> days, <?=$cnt?> results (<?=sprintf("%.1f",$cnt/$days)?>/day)


<? if(!$site_ori) { // 모든 사이트의 경우 비율 분석

    foreach($cnt2 as $engine => $count) {

        echo "$engine : $count (".sprintf("%.1f",$count/$cnt*100)."%)
";

    }

}?></p>

<p></div></p>

<p><script type="text/javascript">

function findsq(sq) {

    if(sq=="") return;

    var i = 0;

    var search_cnt = 0; // 결과내 검색 개수

    while(a = document.getElementById("m3sqtd["+i+"]")) {

        if(a.innerText.toLowerCase().match(sq.toLowerCase())) { // 찾는 값이 있으면 보이기

            a.parentNode.style.display="";

            search_cnt++;

        } else { // 찾는 값이 없으면 숨기기

            a.parentNode.style.display="none";

        }

        i++;

    }

    document.getElementById("search_cnt").innerText = "결과내 검색 : " + search_cnt + "건";

}

function resetsq() {

    var i = 0;

    while(a = document.getElementById("m3sqtd["+i+"]")) {

        a.parentNode.style.display=""; // 모든 행의 display 속성 reset

        i++;

    }

    document.getElementById("search_cnt").innerText = "";

    document.getElementById("sq").value = "";

}

</script>

<?

include_once("$g4[path]/_tail.php");

?></p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

</p>

<p>$site_arr = array("Google", "Nate", "Yahoo", "Daum", "Naver", "Bing");

$surl_arr = array("Google" => "%google.com%", "Nate" => "%nate.com%", "Yahoo" => "%search.yahoo.com%", "Daum" => "%search.daum.net%", "Naver" => "%search.naver.com%", "Bing" => "%bing.com%");

$svar_arr = array("Google" => "q", "Nate" => "q", "Yahoo" => "p", "Daum" => "q", "Naver" => "query", "Bing" => "q");</p>

<p>
이렇게 수정하고 몇가지 적용해 보았는데 잘 됩니다.    // 가끔 빈 것들도 있다 -_- if(!strlen($querystr)) continue; 이 부분에서 만약에 $row['vi_referer']에 ?q의 q가 없으면  continue 되어서 나오지 않게 됩니다. 참고하세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

대한사랑
1년 전
저는 수정했지만 안되네요

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인