php 소스를 xml로 파싱하려고합니다. 도와주세요 정보
php 소스를 xml로 파싱하려고합니다. 도와주세요본문
안녕하세요 ^6^
다름이 아니라 제가 관리 하는 홈페이지 가 10개 넘다보니 일일이 ID,pass 입력하고 들어가는 것이 번거로워 한 홈페이지 에 통합 관리 페이지를 만들려고하는데요...
밑에 보시는 php 소스는 각 홈페이지마다 오늘 방문수 를 나타낸것입니다. 이 php 파일을 xml 로 파싱을 해서 실시간 데이터 연동을 통합관리 홈페이지에 보내려고 하는데됴... 밑에 php 소스를 어떻게 xml 로 파싱을 하여야 하나요?
<?
include_once("./_common.php");
$g4[title]="도메인";
// 날짜 설정
if(!$datefrom) $datefrom = date("Y-m-d", strtotime("0 days ago"));
if(!$dateto) $dateto = $g4[time_ymd];
// 주사 지랄 방지
$datefrom = substr($datefrom, 0, 10);
$dateto = substr($dateto, 0, 10);
$site = substr($site, 0, 10);
$site_ori = $site;
// 검색사이트들
$site_arr = array("Yahoo", "Bing", "Nate", "Google", "Daum", "Naver");
$surl_arr = array("Yahoo" => "%search.yahoo.com%", "Bing" => "http://www.bing.com%", "Nate" => "%nate.com%", "Google" => "http://www.google.%", "Daum" => "%search.daum.net%","Naver" => "%search.naver.com%");
$svar_arr = array("Yahoo" => "p","Bing" => "q","Nate" => "q", "Google" => "q", "Daum" => "q", "Naver" => "query");
?>
<style type="text/css">
#m3tbl { border:solid 1px #FFFFFF; border-collapse:collapse;}
#m3tbl th { border:solid 1px #FFFFFF; text-align:center;}
#m3tbl td { border:solid 1px #FFFFFF; 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 #0100FF; }
</style>
<div id="div_m3sq">
<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="검색" />
</form>
<?
// 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 )";
}
$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" border="0" width="100%">
<?
$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);
// 캐릭터셋이 UTF-8인 경우는 EUC-KR로 고치기 (UTF-8 유저는 EUC-KR과 UTF-8을 서로 바꿔주면 될 듯)
$charset = mb_detect_encoding($querystr, "ASCII, UTF-8, EUC-KR");
if($charset=="UTF-8") $querystr = iconv("UTF-8", "EUC-KR", $querystr);
// 자잘한 처리들
$querystr = trim($querystr);
$querystr = htmlspecialchars($querystr);
// 가끔 빈 것들도 있다 -_-
if(!strlen($querystr)) continue;
// 에코
echo "";
echo "";
echo "";
// 카운트용 변수
$cnt++;
$cnt2[$engine]++;
}
ksort($cnt2);
// 베짱이님 제공 함수
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));
}
?>
</table>
<?=$g4['title']?> → 합계 : <?=$cnt?> 명
<? if(!$site_ori) { // 모든 사이트의 경우 비율 분석
foreach($cnt2 as $engine => $count) {
echo "$engine : $count 명 ";
}
}?>
</div>
다름이 아니라 제가 관리 하는 홈페이지 가 10개 넘다보니 일일이 ID,pass 입력하고 들어가는 것이 번거로워 한 홈페이지 에 통합 관리 페이지를 만들려고하는데요...
밑에 보시는 php 소스는 각 홈페이지마다 오늘 방문수 를 나타낸것입니다. 이 php 파일을 xml 로 파싱을 해서 실시간 데이터 연동을 통합관리 홈페이지에 보내려고 하는데됴... 밑에 php 소스를 어떻게 xml 로 파싱을 하여야 하나요?
<?
include_once("./_common.php");
$g4[title]="도메인";
// 날짜 설정
if(!$datefrom) $datefrom = date("Y-m-d", strtotime("0 days ago"));
if(!$dateto) $dateto = $g4[time_ymd];
// 주사 지랄 방지
$datefrom = substr($datefrom, 0, 10);
$dateto = substr($dateto, 0, 10);
$site = substr($site, 0, 10);
$site_ori = $site;
// 검색사이트들
$site_arr = array("Yahoo", "Bing", "Nate", "Google", "Daum", "Naver");
$surl_arr = array("Yahoo" => "%search.yahoo.com%", "Bing" => "http://www.bing.com%", "Nate" => "%nate.com%", "Google" => "http://www.google.%", "Daum" => "%search.daum.net%","Naver" => "%search.naver.com%");
$svar_arr = array("Yahoo" => "p","Bing" => "q","Nate" => "q", "Google" => "q", "Daum" => "q", "Naver" => "query");
?>
<style type="text/css">
#m3tbl { border:solid 1px #FFFFFF; border-collapse:collapse;}
#m3tbl th { border:solid 1px #FFFFFF; text-align:center;}
#m3tbl td { border:solid 1px #FFFFFF; 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 #0100FF; }
</style>
<div id="div_m3sq">
<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="검색" />
</form>
<?
// 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 )";
}
$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" border="0" width="100%">
<?
$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);
// 캐릭터셋이 UTF-8인 경우는 EUC-KR로 고치기 (UTF-8 유저는 EUC-KR과 UTF-8을 서로 바꿔주면 될 듯)
$charset = mb_detect_encoding($querystr, "ASCII, UTF-8, EUC-KR");
if($charset=="UTF-8") $querystr = iconv("UTF-8", "EUC-KR", $querystr);
// 자잘한 처리들
$querystr = trim($querystr);
$querystr = htmlspecialchars($querystr);
// 가끔 빈 것들도 있다 -_-
if(!strlen($querystr)) continue;
// 에코
echo "";
echo "";
echo "";
// 카운트용 변수
$cnt++;
$cnt2[$engine]++;
}
ksort($cnt2);
// 베짱이님 제공 함수
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));
}
?>
</table>
<?=$g4['title']?> → 합계 : <?=$cnt?> 명
<? if(!$site_ori) { // 모든 사이트의 경우 비율 분석
foreach($cnt2 as $engine => $count) {
echo "$engine : $count 명 ";
}
}?>
</div>
댓글 전체
php 소스를 어떻게 xml 로 파싱을 하기 위해선 xml 형태로 데이터를 뿌려줘야 합니다.
현재처럼 html 형태로 뿌리고 있다면, 굳이 xml 파싱하는 것보다
html로 파싱하셔도 됩니다.
http://www.php.net/manual/en/function.file-get-contents.php
참고하시기 바랍니다.
현재처럼 html 형태로 뿌리고 있다면, 굳이 xml 파싱하는 것보다
html로 파싱하셔도 됩니다.
http://www.php.net/manual/en/function.file-get-contents.php
참고하시기 바랍니다.
<?
include_once("./_common.php");
$g4[title]="도메인";
// 날짜 설정
if(!$datefrom) $datefrom = date("Y-m-d", strtotime("0 days ago"));
if(!$dateto) $dateto = $g4[time_ymd];
// 주사 지랄 방지
$datefrom = substr($datefrom, 0, 10);
$dateto = substr($dateto, 0, 10);
$site = substr($site, 0, 10);
$site_ori = $site;
// 검색사이트들
$site_arr = array("Yahoo", "Bing", "Nate", "Google", "Daum", "Naver");
$surl_arr = array("Yahoo" => "%search.yahoo.com%", "Bing" => "http://www.bing.com%", "Nate" => "%nate.com%", "Google" => "http://www.google.%", "Daum" => "%search.daum.net%","Naver" => "%search.naver.com%");
$svar_arr = array("Yahoo" => "p","Bing" => "q","Nate" => "q", "Google" => "q", "Daum" => "q", "Naver" => "query");
// 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 )";
}
$query = sql_query("select * from `$g4[visit_table]` where $where1 AND vi_date>='$datefrom' AND vi_date<='$dateto' order by vi_id desc");
$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);
// 캐릭터셋이 UTF-8인 경우는 EUC-KR로 고치기 (UTF-8 유저는 EUC-KR과 UTF-8을 서로 바꿔주면 될 듯)
$charset = mb_detect_encoding($querystr, "ASCII, UTF-8, EUC-KR");
if($charset=="UTF-8") $querystr = iconv("UTF-8", "EUC-KR", $querystr);
// 자잘한 처리들
$querystr = trim($querystr);
$querystr = htmlspecialchars($querystr);
// 가끔 빈 것들도 있다 -_-
if(!strlen($querystr)) continue;
// 에코
// 카운트용 변수
$cnt++;
$cnt2[$engine]++;
}
ksort($cnt2);
// 베짱이님 제공 함수
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));
}
$infoarray['totalvisit'] = $cnt;
<? if(!$site_ori) { // 모든 사이트의 경우 비율 분석
foreach($cnt2 as $engine => $count) {
$infoarray[$engine] = $count;
}
}
echo json_encode($infoarray); // php 5.2부터 지원.
?>
통합서버에서 해당 페이지 호출 ..가령
$infoarray = json_decode( 여긴 snoopy 나 curl , fopen 등으로 해당 페이지 호출 );
이상태면 $infoarray에 위 서버 정보가 그대로 사용.
xml 필요없죠.
include_once("./_common.php");
$g4[title]="도메인";
// 날짜 설정
if(!$datefrom) $datefrom = date("Y-m-d", strtotime("0 days ago"));
if(!$dateto) $dateto = $g4[time_ymd];
// 주사 지랄 방지
$datefrom = substr($datefrom, 0, 10);
$dateto = substr($dateto, 0, 10);
$site = substr($site, 0, 10);
$site_ori = $site;
// 검색사이트들
$site_arr = array("Yahoo", "Bing", "Nate", "Google", "Daum", "Naver");
$surl_arr = array("Yahoo" => "%search.yahoo.com%", "Bing" => "http://www.bing.com%", "Nate" => "%nate.com%", "Google" => "http://www.google.%", "Daum" => "%search.daum.net%","Naver" => "%search.naver.com%");
$svar_arr = array("Yahoo" => "p","Bing" => "q","Nate" => "q", "Google" => "q", "Daum" => "q", "Naver" => "query");
// 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 )";
}
$query = sql_query("select * from `$g4[visit_table]` where $where1 AND vi_date>='$datefrom' AND vi_date<='$dateto' order by vi_id desc");
$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);
// 캐릭터셋이 UTF-8인 경우는 EUC-KR로 고치기 (UTF-8 유저는 EUC-KR과 UTF-8을 서로 바꿔주면 될 듯)
$charset = mb_detect_encoding($querystr, "ASCII, UTF-8, EUC-KR");
if($charset=="UTF-8") $querystr = iconv("UTF-8", "EUC-KR", $querystr);
// 자잘한 처리들
$querystr = trim($querystr);
$querystr = htmlspecialchars($querystr);
// 가끔 빈 것들도 있다 -_-
if(!strlen($querystr)) continue;
// 에코
// 카운트용 변수
$cnt++;
$cnt2[$engine]++;
}
ksort($cnt2);
// 베짱이님 제공 함수
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));
}
$infoarray['totalvisit'] = $cnt;
<? if(!$site_ori) { // 모든 사이트의 경우 비율 분석
foreach($cnt2 as $engine => $count) {
$infoarray[$engine] = $count;
}
}
echo json_encode($infoarray); // php 5.2부터 지원.
?>
통합서버에서 해당 페이지 호출 ..가령
$infoarray = json_decode( 여긴 snoopy 나 curl , fopen 등으로 해당 페이지 호출 );
이상태면 $infoarray에 위 서버 정보가 그대로 사용.
xml 필요없죠.