Search Results for '프로그래밍/PHP'


67 posts related to '프로그래밍/PHP'

  1. 2017/02/10 네이버 블로그에 포스팅 하기(XMLRPC, PHP)
  2. 2012/11/02 Piwik(Open source web analytics) 네이버 한글 문제
  3. 2012/09/11 네이버 지도 주소에서 간단히 사이트에 구현하기
  4. 2012/07/20 어떤 스마트폰에서 접속했는지 알아내는 함수
  5. 2012/05/05 어떤 스마트폰에서 접속했는지 알아내는 함수
  6. 2012/02/07 PHP에서 홑따움표 검색처리 1
  7. 2011/11/03 모바일로 접속했을때는 모바일 전용 페이지로 리다이렉트 시키거가
  8. 2011/10/24 토렌트 검색기 소스
  9. 2011/09/11 http https 구분않고 무조건 www 붙이기 1
  10. 2011/09/07 PHP 세션 공유 - memcache 이용
  11. 2011/05/29 [함수] [PHP] 한글자르기 (출력길이기준)
  12. 2011/05/14 네이버 스팸차단 필터 이용해서 스팸스코어 얻는 함수
  13. 2011/05/14 smtp with gmail 1
  14. 2011/03/06 파일형 체팅물 알고리즘입니다. [100% 안정성 보장]
  15. 2011/03/06 [함수] JPEG EXIF 정보 얻는 함수(read_exif_data 사용 안함)
  16. 2010/11/06 [함수]트위터(?) 처럼 날짜데이터를 간소하게 출력
  17. 2010/11/06 PHP 서브도메인 세션 쿠키 공유하기
  18. 2010/10/01 [알고리즘] 동일폴더내 파일들 일괄 rename 간단한 팁
  19. 2010/08/18 요일, 시간마다 다른 CSS 제어
  20. 2010/08/18 GET 인지 POST 인지 알아내기
  21. 2010/08/18 AjaxPlorer Ver 2.55 한글 업로드 및 다운로드
  22. 2010/06/07 만료된 페이지 만들기
  23. 2010/03/30 PHP 리다이렉션 페이지 이동 - 3가지 방법 1
  24. 2010/03/30 한개의 호스팅으로 여러개 홈피 동시운영! 1
  25. 2010/03/12 압축하며 다운하기. passthru()
  26. 2010/02/11 escape 된 문자열 PHP uncscape 함수
  27. 2009/09/30 PHP XML 파서
  28. 2009/09/30 PHP RSS 리더
  29. 2009/08/25 Sphinx - PHP 로 커스텀 검색 엔진 구현하기
  30. 2009/05/27 DeZend (PHP 디코딩) 1

<?php
include_once '
xmlrpc.inc'; // 파일 첨부함.

function newPost($title, $description)

{
$g_blog_url = "
https://api.blog.naver.com/xmlrpc";
$user_id = "
사용사아이디";
$blogid = "
블로그아이디";
$password = "
비밀번호";
$publish = true;

$client = new xmlrpc_client($g_blog_url);
$client->setSSLVerifyPeer(false); // 
기본값은 true인데, false 설정하지 않으면 SSL 에러남.
$GLOBALS['xmlrpc_internalencoding']='UTF-8′; //
기본값은 ISO-8859-1, 기본값 사용시 한글 깨짐.

$struct = array(
'title'   => new xmlrpcval($title, "string"),
'description'   => new xmlrpcval($description, "string")
);

$f = new xmlrpcmsg("metaWeblog.newPost",
array(
new xmlrpcval($blogid, "string"),
new xmlrpcval($user_id, "string"),
new xmlrpcval($password, "string"),
new xmlrpcval($struct , "struct"),
new xmlrpcval($publish, "boolean")
)
);
$f->request_charset_encoding = 'UTF-8';

//echo '<pre>'; print_r($f); exit;

return $response = $client->send($f);
}

$return = newPost('test naver rpc', iconv('EUC-KR', 'UTF-8', 'testtestetstest..한글 출력…'));
echo '<pre>';
print_r($return);
?>

2017/02/10 22:52 2017/02/10 22:52
http://piwik.org/ 
Piwik(Open source web analytics)  구글 Google Analytics와 유사합니다. 독립적으로 설치해서
여러 도메인 통계 정보 등을 파악 할수 있습니다. 설치 방법도 간단합니다.
사용하다

다른 검색 엔진은 이상이 없으나 네이버 naver  는 유니코드 문제로 한글 키워드가 제대로 안나오는 문제가 생겨
소스를 보게 되었습니다.

piwik\core\DataFiles\SearchEngines.php 파일을 열어 보시면 .

650 라인에

  // Naver
  'search.naver.com'   => array('Naver', 'query', 'search.naver?query={k}', 'EUC-KR'),
이런 소스가 보입니다.  위 라인을
  'search.naver.com'=> array('Naver', 'query', 'search.naver?query={k}'),

으로 변경하면 정상적으로 한글이 잘 보입니다.

 
2012/11/02 18:45 2012/11/02 18:45
php 파일 -------

define(NAVER_MAP_KEY, "네이버오픈API에서 받은 키를 넣어주세요.");

function get_navermap_coods($p_str_addr="")
{
$int_x = 0;
$int_y = 0;

$str_addr = str_replace(" ", "", $p_str_addr);

// curl 이용해서 지도에 필요한 좌표를 취득
$dest_url = "http://openapi.map.naver.com/api/geocode.php?key=" . NAVER_MAP_KEY . "&encoding=utf-8&coord=LatLng&query=" . urlencode($str_addr);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $dest_url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$str_result = curl_exec($ch);
curl_close($ch);

$obj_xml = simplexml_load_string($str_result);

$int_x = $obj_xml->item->point->x;
$int_y = $obj_xml->item->point->y;

return array($int_x, $int_y);
}


// 주소에서 좌표를 추출한다.
$str_addr = "서울시 강동구 길동 96-4";
list($int_x, $int_y) = get_navermap_coods($str_addr);


html 파일 --------------------------

<!-- 네이버 지도 스크립트는 상단에 위치하면 된다.-->

<script type="text/javascript">
try {document.execCommand('BackgroundImageCache', false, true);} catch(e) {}
</script>
<script type="text/javascript" src="http://openapi.map.naver.com/openapi/naverMap.naver?ver=2.0&key=<?= NAVER_MAP_KEY; ?>"></script>



<!-- 네이버 지도는 필요한 곳에 붙여넣으면 됩니다. -->

<div id = "naverMap" style="border:1px solid #000; width:431px; height:288px; margin:20px;"></div>

<script type="text/javascript">
var oPoint = new nhn.api.map.LatLng(<?= $int_y; ?>, <?= $int_x; ?>); // - 지도의 중심점을 나타내는 변수 선언
nhn.api.map.setDefaultPoint('LatLng'); // - 지도에서 기본적으로 사용하는 좌표계를 설정합니다.
var markerCount = 0;
oMap = new nhn.api.map.Map('naverMap', {
point : oPoint,
zoom : 10, // - 초기 줌 레벨은 10으로 둔다.
enableWheelZoom : false,
enableDragPan : true,
enableDblClickZoom : false,
mapMode : 0,
activateTrafficMap : false,
activateBicycleMap : false,
minMaxLevel : [ 1, 14 ],
size : new nhn.api.map.Size(431, 288)
});
var mapZoom = new nhn.api.map.ZoomControl(); // - 줌 컨트롤 선언
themeMapButton = new nhn.api.map.ThemeMapBtn(); // - 자전거지도 버튼 선언
mapTypeChangeButton = new nhn.api.map.MapTypeBtn(); // - 지도 타입 버튼 선언
var trafficButton = new nhn.api.map.TrafficMapBtn(); // - 실시간 교통지도 버튼 선언
trafficButton.setPosition({top:10, right:110}); // - 실시간 교통지도 버튼 위치 지정
mapTypeChangeButton.setPosition({top:10, left:50}); // - 지도 타입 버튼 위치 지정
themeMapButton.setPosition({top:10, right:10}); // - 자전거지도 버튼 위치 지정
mapZoom.setPosition({left:10, top:10}); // - 줌 컨트롤 위치 지정.
oMap.addControl(mapZoom);
oMap.addControl(themeMapButton);
oMap.addControl(mapTypeChangeButton);
oMap.addControl(trafficButton);

var oSize = new nhn.api.map.Size(28, 37);
var oOffset = new nhn.api.map.Size(14, 37);
var oIcon = new nhn.api.map.Icon('http://static.naver.com/maps2/icons/pin_spot2.png', oSize, oOffset);

var oMarker = new nhn.api.map.Marker(oIcon, { title : '<?= $str_hospital_name; ?>' }); //마커 생성
oMarker.setPoint(oPoint);
oMap.addOverlay(oMarker);
var oLabel = new nhn.api.map.MarkerLabel(); // - 마커 라벨 선언.
oMap.addOverlay(oLabel); // - 마커 라벨 지도에 추가. 기본은 라벨이 보이지 않는 상태로 추가됨.
oLabel.setVisible(true, oMarker); // 마커 라벨 보이기

</script>

<!-- 네이버 지도 끝 -->
2012/09/11 05:02 2012/09/11 05:02
function getBrowser($agent) {
$browser = array(
"MSIE 5.0" => "/msie 5.0[0-9]*/",
"MSIE 5.5" => "/msie 5.5[0-9]*/",
"MSIE 6.0" => "/msie 6.0[0-9]*/",
"MSIE 7.0" => "/msie 7.0[0-9]*/",
"MSIE 8.0" => "/msie 8.0[0-9]*/",
"MSIE 9.0" => "/msie 9.0[0-9]*/",
"Chrome" => "/chrome\/*/",
"FireFox" => "/firefox\/*/",
"Netscape" => "/x11/",
"Opera" => "/opera*/",
"Safari" => "/safari\/*/",
"Android" => "/android/",
"Mobile Safari" => "/mobile\/[0-9a-z]* safari/",
"Robot" => "/yahoo/",
"Robot" => "/bot/"
);
$agent = strtolower($agent);
foreach($browser as $name=>$exp){
if(preg_match($exp, $agent)){
$browser = $name;
}
}
return $browser;
}

$u_agent = $_SERVER['HTTP_USER_AGENT'];
$browser = getBrowser($u_agent);
if($browser == 'Android' || $browser == 'Mobile Safari'){
if($browser == 'Android'){
ECHO "ANDROID";
}else{
ECHO "IPHONE";
}
}else{
ECHO "OTHER";
}
2012/07/20 20:41 2012/07/20 20:41
function getBrowser($agent) {
$browser = array(
"MSIE 5.0" => "/msie 5.0[0-9]*/",
"MSIE 5.5" => "/msie 5.5[0-9]*/",
"MSIE 6.0" => "/msie 6.0[0-9]*/",
"MSIE 7.0" => "/msie 7.0[0-9]*/",
"MSIE 8.0" => "/msie 8.0[0-9]*/",
"MSIE 9.0" => "/msie 9.0[0-9]*/",
"Chrome" => "/chrome\/*/",
"FireFox" => "/firefox\/*/",
"Netscape" => "/x11/",
"Opera" => "/opera*/",
"Safari" => "/safari\/*/",
"Android" => "/android/",
"Mobile Safari" => "/mobile\/[0-9a-z]* safari/",
"Robot" => "/yahoo/",
"Robot" => "/bot/"
);
$agent = strtolower($agent);
foreach($browser as $name=>$exp){
if(preg_match($exp, $agent)){
$browser = $name;
}
}
return $browser;
}

$u_agent = $_SERVER['HTTP_USER_AGENT'];
$browser = getBrowser($u_agent);
if($browser == 'Android' || $browser == 'Mobile Safari'){
if($browser == 'Android'){
ECHO "ANDROID";
}else{
ECHO "IPHONE";
}
}else{
ECHO "OTHER";
}    
2012/05/05 09:14 2012/05/05 09:14

<script>
function SearchCheckForm(f){
if( f.keyword.value == ""){
alert("검색창에 아티스트나 곡명을 입력해주세요.");
f.keyword.focus();
return false;
}
}
</script>
<form action="/ezmart.php" name="SearchCheck" method = "get" onsubmit='return SearchCheckForm(this);' >
<input type = "hidden" name="tquery" value="martmain">
<table width="540" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="228"><img src="/01_img/main/search.gif" width="228" height="34" /></td>
<td background="/01_img/main/search-02.gif" width="261" height="34" class="txtLeft"><input name="keyword" type="text" style="margin:5px 8px 5px 8px; padding:1px; border:none; height:16px; width:238px;" value="<?=urldecode(stripslashes($keyword))?>" /></td>
<td align="right" valign="middle"><input type = "image" src="/01_img/main/search-03.gif" width="51" height="34" /></td>
</tr>
</table>
</form>

<?

/*
DB에서의 저장은
1) '
2) &#039;

2가지로 되어 있는 싱태 이다

ex)

Don\&#039;t Cry (원음 MR)
Don\&#039;t Say Goodbye (MR)
Don\'t Cry (로열패밀리 OST)

*/

// 홑따움표를 변환 시킨다.
if($keyword){
$tkeyword = strip_tags(trim(urldecode(stripslashes($keyword))));
$tkeyword = str_replace(' ' , '' , $tkeyword);
$tkeyword = preg_replace("/\'/", "", $tkeyword);
$tkeyword = preg_replace("/\&#039;/", "", $tkeyword);

$where .= " and ( " ;
$where .= " ( REPLACE(Name,' ','') LIKE '%$tkeyword%' OR REPLACE(Model,' ','') LIKE '%$tkeyword%' ) ";
$where .= " or ( REPLACE( Name, '\\\\&#039;', '' ) LIKE '%$tkeyword%' OR REPLACE( Model, '\\\\&#039;', '' ) LIKE '%$tkeyword%' ) ";
$where .= " or ( REPLACE( Name, '\\\\\\'', '' ) LIKE '%$tkeyword%' OR REPLACE( Model, '\\\\\\'', '' ) LIKE '%$tkeyword%' ) ";

$where .= " ) ";
}

?>

<?
$TransData = "tquery=$tquery&code=$code&keyword=" . urlencode(stripslashes($keyword));
include "${SKIN_FOLDER_NAME}/page/${PageSkin}/index.php" ;
?>

2012/02/07 10:07 2012/02/07 10:07
모바일로 접속했을때는 모바일 전용 페이지로 리다이렉트 시키거가 
모바일 전용 view 페이지를 보여주고싶을때 확인하는 부분입니다.
<?php
if (preg_match('/(iPhone|Android|iPod|BlackBerry|IEMobile|HTC|Server_KO_SKT|SonyEricssonX1|SKT)/', 
$_SERVER['HTTP_USER_AGENT']) ) {
    define('BROWSER_TYPE', 'M'); // mobile	
} else {
    define('BROWSER_TYPE', 'W'); // web (iPad 는 웹으로 간주)
}
if(BROWSER_TYPE == "M")
{
	// 모바일 페이지
}else
{
	// 웹페이지
}
?>
2011/11/03 04:38 2011/11/03 04:38
Snoopy.class.php 다운받으셔서 경로만 맞춰주세요

<?
$g4_path = ".";
include_once("$g4_path/common.php");
include_once("$g4[path]/lib/mw.builder.lib.php");
if($shotbirdie_tkey){
$ti_de = urldecode($shotbirdie_tkey);
$g4[title] = "자료실 > 토렌트검색 : $ti_de";
}else{
$g4[title] = "자료실 > 토렌트검색";
}
@include_once("$g4[path]/head.php");
?>
<script language="Javascript" type="text/Javascript">
<!--
function MM_popupMsg(msg) { //v1.0
alert(msg);
}
//-->
</script>
<style>

.jyGuideBox {margin-top:30px; padding:20px; background:#f2f2f2;}
.jyGuideBox .txt_title {padding-left:20px; height:17px; line-height:19px; font-weight:bold; color:#333; background:url('./img/ico_sprites_bule.gif') no-repeat 2px 2px;}
.jyGuideBox ul {padding-top:8px;}
.jyGuideBox li {padding-left:20px; height:18px; line-height:20px; font-size:11px; color:#999; list-style:none; background:url('./img/ico_sprites_bule.gif') no-repeat 10px -30px;}
</style>
<!--상단검색-->
<table width="730" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="29"><img src="http://soncook2.cdn2.cafe24.com/shotbirdie/search_left.gif" width="29" height="79"></td>
<td valign="top" background="http://soncook2.cdn2.cafe24.com/shotbirdie/search_bodybg.gif"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="40"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="3" height="6"></td>
<td height="6"></td>
</tr>
<tr>
<td> </td>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="150" class="search_txt">토렌트검색</td>
<td class="search_txt"><div align="right">
<?
$k01 = urlencode("1박2일");
$k02 = urlencode("무한도전");
$k03 = urlencode("런닝맨");
$k04 = urlencode("남자의자격");
$k05 = urlencode("영어공부");
$k06 = urlencode("음악");
$k07 = urlencode("성인");
$k08 = urlencode("서식");
$k09 = urlencode("자막");
$k10 = urlencode("강좌");
$k11 = urlencode("나는가수다");

?>
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k05?>'><span class='search_txt'><u>영어공부</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k11?>'><span class='search_txt'><u>나는 가수다</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k01?>'><span class='search_txt'><u>1박2일</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k02?>'><span class='search_txt'><u>무한도전</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k03?>'><span class='search_txt'><u>런닝맨</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k04?>'><span class='search_txt'><u>남자의자격</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k06?>'><span class='search_txt'><u>음악</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k07?>'><span class='search_txt'><u>성인</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k08?>'><span class='search_txt'><u>무료서식</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k09?>'><span class='search_txt'><u>자막</u></span></a> |
<a href='<?=$PHP_SELF?>?shotbirdie_tkey=<?=$k10?>'><span class='search_txt'><u>강좌</u></span></a>

</div></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td height="39"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<form type="get" action="<?=$PHP_SELF_SELF?>">
<tr>
<td><input name=shotbirdie_tkey maxlength=30 itemname="토렌트 검색어" required value='<?=$shotbirdie_tkey?>' style="width:620; height:22px;"></td>
<td width="60"><div align="right">
<input name="image" type=image src="http://soncook2.cdn2.cafe24.com/shotbirdie/search_bt.gif" align=absmiddle width="49" height="21" border=0>
</div></td>
</tr>
</form>
</table></td>
</tr>
</table></td>
<td width="20"><img src="http://soncook2.cdn2.cafe24.com/shotbirdie/search_right.gif" width="20" height="79"></td>
</tr>
</table>
<!--상단검색-->
<center>매일 10~11시, 15~16시, 20~23시는 비회원 다운로드 가능(회원은 언제나 가능)</center>
<?
if($shotbirdie_tkey == ''){ }else{
require './lib/Snoopy.class.php';
ini_set("allow_url_fopen","1");

switch($sort_code){
case 'a': //최근
$sort = "a/d/";
$scolor01 = "style='color: #990000;'";
break;
case 'c': //인기
$sort = "c/d/";
$scolor02 = "style='color: #990000;'";
break;
case 's': //시더
$sort = "s/d/";
$scolor03 = "style='color: #990000;'";
break;
case 'n': //이름
$sort = "n/d/";
$scolor04 = "style='color: #990000;'";
break;
case 'z': //크기
$sort = "z/d/";
$scolor05 = "style='color: #990000;'";
break;
default: //인기
$sort = "c/d/";
$scolor02 = "style='color: #990000;'";
$tpage = 1;
break;
}
switch($tpage){
case '1':
$tcolor01 = "style='color: #990000; font-weight:bold;'";
break;
case '2':
$tcolor02 = "style='color: #990000; font-weight:bold;'";
break;
case '3':
$tcolor03 = "style='color: #990000; font-weight:bold;'";
break;
default:
$tcolor02 = "style='color: #990000; font-weight:bold;'";
break;
}
$url = "http://bitsnoop.com/search/all/".$shotbirdie_tkey."/".$sort.$tpage."/?fmt=rss";
$snoopy = new Snoopy;
$snoopy->fetch($url);
$xml = @simplexml_load_string($snoopy->results);
$listct = '30'; //첫 파싱후 2번째부터는 수량조절용으로 사용(최적화를 위해)
//$listct = count($xml->item);

//테이블상단
echo "
<br><br>
<table width='730' height='30' border='0' align='center' cellpadding='0' cellspacing='0'>
<tr>
<td>
<table width='100%' border='0' cellspacing='5' cellpadding='0'>
<tr>
<td width='50%' align='left'><a href='./bbs/board.php?bo_table=notice&wr_id=3' target='_blank'><font color='#990000'>토렌트 설치 및 사용법</a></td>
<td width='50%' align='right'>
<!--순서-->
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=a&tpage=$tpage'><span $scolor01>최신순</span></a> |
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=c&tpage=$tpage'><span $scolor02>인기순</span></a> |
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=s&tpage=$tpage'><span $scolor03>시드순</span></a> |
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=n&tpage=$tpage'><span $scolor04>이름순</span></a> |
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=z&tpage=$tpage'><span $scolor05>크기순</span></a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width='730' border='0' align='center' cellpadding='0' cellspacing='0'>
<tr>
<td><table width='100%' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td height='1' bgcolor='BFBFBF'></td>
</tr>
<tr>
<td height='32' bgcolor='FAFAFA'><table width='100%' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td width='38' align='center'>번호</td>
<td width='500' align='center'>제목</td>
<td width='66' align='center'>크기</td>
<td width='38' align='center'>시드</td>
<td width='44' align='center'>마그넷</td>
<td width='44' align='center'>토렌트</td>
</tr>
</table></td>
</tr>
<tr>
<td height='1' bgcolor='EDEDED'></td>
</tr>
</table></td>
</tr>
<tr>
<td>
";
for($i=0; $i<$listct; $i++){
$wr_subject[$i] = $xml->channel->item[$i]->title;
$category[$i] = $xml->channel->item[$i]->category;
$link[$i] = $xml->channel->item[$i]->link;
$pubDate[$i] = $xml->channel->item[$i]->pubDate;
$numSeeders[$i] = $xml->channel->item[$i]->numSeeders;
$numLeechers[$i] = $xml->channel->item[$i]->numLeechers;
$numFiles[$i] = $xml->channel->item[$i]->numFiles;
$numComments[$i] = $xml->channel->item[$i]->numComments;
$size[$i] = $xml->channel->item[$i]->size;
$fileName[$i] = $xml->channel->item[$i]->torrent->fileName;
$url_join[$i] = 'http://torrage.com/torrent/'.$fileName[$i];
$contentLength[$i] = $xml->channel->item[$i]->torrent->contentLength;
$infoHash[$i] = $xml->channel->item[$i]->torrent->infoHash;
$magnetURI[$i] = $xml->channel->item[$i]->torrent->magnetURI;
$wr_content[$i] = $xml->channel->item[$i]->description;
//echo "$wr_subject / $fileName / $url_join<br>";
//순번
$num = $i+1;
//파일용량
$size[$i] = round(($size[$i] / 1024)/1024);

//회원가입에 따른차등
if(!$member['mb_id']){
//안내메세지
$tmsg = "매일 10~11시, 15~16시, 20~23시는 비회원 다운로드 가능하세요^^";

$timeinfo = getdate(time());
if(($timeinfo[hours] >= '10' and $timeinfo[hours] < '11') or ($timeinfo[hours] >= '15' and $timeinfo[hours] < '16') or ($timeinfo[hours] >= '20' and $timeinfo[hours] < '23')){
$magnetURI_m[$i] = "<a href='$magnetURI[$i]' target='_blank' onClick=\"MM_popupMsg('$tmsg')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img01.GIF' border='0'></a>";
$url_join_m[$i] = "<a href='$url_join[$i]' target='_blank' onClick=\"MM_popupMsg('$tmsg')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img02.GIF' border='0'></a>";
}else{
$magnetURI_m[$i] = "<a href='http://web.search.naver.com/search.naver?where=site&sm=dir_hty&query=%BC%A6%B9%F6%B5%F0&ctgids=' target='_blank' onClick=\"MM_popupMsg('$tmsg-샷버디 클릭후에 로그인 해주시면 됩니다')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img01.GIF' border='0'></a>";
$url_join_m[$i] = "<a href='http://web.search.naver.com/search.naver?where=site&sm=dir_hty&query=%BC%A6%B9%F6%B5%F0&ctgids=' target='_blank' onClick=\"MM_popupMsg('$tmsg-샷버디 클릭후에 로그인 해주시면 됩니다')\"><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img02.GIF' border='0'></a>";
}
}else{ //로그인시
$magnetURI_m[$i] = "<a href='$magnetURI[$i]'><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img01.GIF' border='0'></a>";
$url_join_m[$i] = "<a href='$url_join[$i]'><img src='http://soncook2.cdn2.cafe24.com/shotbirdie/torrent_img02.GIF' border='0'></a>";
}

//중복내용
echo "
<table width='100%' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td><table width='100%' height='33' border='0' cellpadding='0' cellspacing='0'>
<tr>
<td width='38' align='center'>$num</td>
<td width='500'>$wr_subject[$i]</td>
<td width='66' align='center'>$size[$i]MB</td>
<td width='38' align='center'>$numSeeders[$i]</td>
<td width='44' align='center'>$magnetURI_m[$i]</td>
<td width='44' align='center'>$url_join_m[$i]</td>
</tr>
</table></td>
</tr>
<tr>
<td height='1' bgcolor='EDEDED'></td>
</tr>
</table>
";
//echo "$num - <a href='$url_join[$i]' target='_blank'>$wr_subject[$i]</a><br>";
}//end for($i)
//테이블하단
echo "
</td>
</tr>
<tr>
<td align='center'>
<!--페이지-->
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=$sort_code&tpage=1'><span $tcolor01>1</span></a> |
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=$sort_code&tpage=2'><span $tcolor02>2</span></a> |
<a href='$PHP_SELF_SELF?shotbirdie_tkey=$shotbirdie_tkey&sort_code=$sort_code&tpage=3'><span $tcolor03>3</span></a>
</td>
</tr>
</table>
";
} //end if(shotbirdie_tkey)
?>
<div class="jyGuideBox">
<p class="txt_title">반드시 읽어보세요.</p>
<ul>
<li>본 서비스는 토렌트 외부 검색기로, 토렌트 통합검색을 제공합니다.</li>
<li>검색자료는 서버에 저장, 관리 하지 않으며, 검색 및 다운로드만을 제공합니다.</li>
<li>업로드 서비스는 제공되지 않으며, 이미지를 제공하지 않습니다.</li>
<li>일부 파일은 다운로드 되지 않을 수 있으며, 자료의 질에 대해서는 보장하지 않습니다.</li>
</ul>
</div>
<?
//유가정보

?>
<?
@include_once("$g4[path]/tail.php");
?>      
                                
2011/10/24 12:20 2011/10/24 12:20

좀 지저분해졌지만..;

    if ( substr($_SERVER['HTTP_HOST'],0,4)!='www.' ) {
    $url = (isset($_SERVER['HTTPS'])?'https://www.주소':'http://www.주소').substr($_SERVER['HTTP_HOST'],4).$_SERVER['REQUEST_URI'];
     @header ('Location: '.$url);
    exit;
}

로 해결했습니다. ;

2011/09/11 20:29 2011/09/11 20:29

Memcached 사용하기

Memcached 데몬
사이트 : http://www.danga.com/memcached/
다운로드 : http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz

Memcached PHP Extension
사이트 : http://pecl.php.net/package/memcache
다운로드 : http://pecl.php.net/get/memcache-2.2.5.tgz

LibEvent
사이트 : http://monkey.org/~provos/libevent/
다운로드 : http://monkey.org/~provos/libevent-1.4.11-stable.tar.gz

Memcached 는 데이터를 메모리에 저장하여 이용할 수 있는 데몬이다. 분산처리가 가능하고 매우 빠른 성능을 지닌 캐시 이다.
(편의상 root로 작업)

1. Memcached 설치

우선 Memcached 를 적당한 디렉토리 (/usr/local/src) 등에 다운로드를 받는다.
# tar zxvf memcached-1.2.8.tar.gz
# cd memcached-1.2.8
# configure --prefix=/usr/local/memcached
* checking for libevent directory... configure: error: libevent is required 메세지가 나오면 libevent 라이블러리를 설치를 해줘야 한다.

# make
# make install

1-1 memcached 실행
# cd /usr/local/memcached (configure 에서 지정한 prefix로 이동)
# bin/memcached -u [실행될 사용자] &
* 실행될 사용자는 memcached 데몬이 -u 옵션으로 지정된 사용자로 실행이 된다 (root로 지정하면 안됨)
# netstat -na | grep 11211
->
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 :::11211 :::* LISTEN

포트를 확인한다.

2. Memcache PHP Extension
# tar zxvf memcache-2.2.5.tgz
# cd memcache-2.2.5
# phpize
# ./configure
# make
# cp .libs/memcache.so /(php 익스텐션 디렉토리) php.ini에서 지정한 extension_dir 에서 설정한 디렉토리
# php -m | grep memcache 로 모듈 확인
# /etc/init.d/httpd restart 또는 /usr/local/apache/bin/apachectl restart 로 Apache 재시작

PHP info 확인

사용자 삽입 이미지

3. Libevent 설치 (옵션)
* Memcache Configure 중 libevent 가 필요하다는 메세지를 보내고 중단이 되었을때 설치를 한다.

libevent 를 다운로드 받는다.
# tar zxvf libevent-1.4.11-stable.tar.gz
# cd libevent-1.4.11-stable
# ./configure
# make
# make install (/usr/local/lib 에 libevent.so 파일이 존재하는지 확인한다.)
# ldconfig (vi /etc/ld.so.conf 에 /usr/local/lib 추가를 한다.



PHP 의 환경 설정 파일에서 session 부분을 아래와 같이 변경 합니다.

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

위와 같이 셋팅을 합니다. 셋팅을 완료한 후에는 Apache 를 재시작 해주시면 설정이 적용이 됩니다.
PHP 세션을 file이 아닌 memcache를 이용해 저장을 하는 방식입니다. 다른 머신의 웹 서버에서 세션을 공유할 때 위와 같이 사용하시면 됩니다

PHP 테스트 소스.

 
01.<?
02. session_start();
03.
04. // 서버 정보 표시
05. echo 'SERVER_NAME : ' . $_SERVER['SERVER_NAME'] . '<BR />';
06. echo 'SERVER_ADDR : ' . $_SERVER['SERVER_ADDR'] . '<BR />';
07. echo 'SERVER_SERVER_SOFTWARE : ' . $_SERVER['SERVER_SOFTWARE'] . '<BR />';
08. echo 'session.save_handler : ' . ini_get('session.save_handler') . '<BR />';
09. echo 'session.save_path : ' . ini_get('session.save_path') . '<BR /><BR />';
10.
11. // 세션이 정상적으로 생겼으면
12. if($_SESSION['check'])
13. {
14. echo 'increment count <br />' ;
15. // 카운트를 증가 시킨다.
16. $_SESSION['reflashCnt']++;
17. }
18. else
19. {
20. // 없을 경우 세션 정보를 입력한다.
21. echo 'create session information <br />' ;
22. $_SESSION['check'] = true;
23. $_SESSION['name'] = 'lovelgw';
24. $_SESSION['age'] = 21;
25. $_SESSION['reflashCnt'] = 0;
26. }
27.
28. foreach ($_SESSION as $key => $value)
29. echo $key . ' => ' . $value . '<br>';
30.
31.?>

사용자 삽입 이미지

서버에서 호출한 화면

사용자 삽입 이미지

localhost 에서 호출한 화면 (hosts 파일 변경 후 동작)

세션이 공유를 테스트 하기 위해 %SystemRoot%\system32\drivers\etc\hosts 파일을 변경하였습니다.
127.0.0.1 lovelgw.com
위와 같이 설정을 변경한다음 로컬 서버와 원격지와 세션을 공유 해보았습니다.

memcache 를 이용해 세션을 공유하는 방법입니다

2011/09/07 01:12 2011/09/07 01:12
자른 문자열 뒤에 추가된 문자열(...과 같은 말줄임표)로 인해 원하는 길이보다 길어지는 경우를 방지한 한글자르기 함수입니다.
표에 쓰이면 적당합니다.
이상한 부분 있으면 말씀해 주세요.

// Mari's PHP function substrhan(string $string , int $length [, string $footer])
// $string : 입력문자열
// $length : 출력문자열길이
// $footer : 말줄임표문자열

function substrhan($str, $len, $footer='') {
if(strlen($str) <= $len) {
return $str;
}
else {
$len = $len - strlen($footer);
for($i=0; $i<$len; $i++) if(ord($str[$i])>127) $i++;
if($i > $len) $i-=2;
$str=substr($str,0,$i);
return $str.$footer;
}
}

// Examples
$text1 = '안녕하세요';
$text2 = '날씨가 너무 좋아요.';
$text3 = '난 널 사랑해.';

$text1 = substrhan($text1, 10, '..'); // returns "안녕하세요"
$text2 = substrhan($text2, 10, '..'); // returns "날씨가 .."
$text3 = substrhan($text3, 10, '..'); // returns "난 널 사.."                                       
2011/05/29 23:54 2011/05/29 23:54
function get_spam_score($title,$content){

if(!$content){ $content = $title; }

$server_ip = '여러분들의 IP';

$s = '<?xml version="1.0" encoding="utf-8" ?>
<methodCall>
<params>
<method>getSpamScores</method>
<spamfilters><item><id>1</id></item></spamfilters>
<contents>
<item>
<id>1</id>
<title><![CDATA['.$title.']]></title>
<content><![CDATA['.$content.']]></content>
<ip>'.$server_ip.'</ip>
<pubdate>'.date("Y-m-d H:i:s").'</pubdate>
</item>
</contents>
</params>
</methodCall>';

$header = "POST / HTTP/1.1\r\n".
"Connection: close\r\n".
"Host: antispam.openapi.naver.com\r\n".
"Content-Type: application/xml; charset=UTF-8\r\n".
"Content-Length: ".strlen($s)."\r\n\r\n".$s."\r\n";
//echo $header;
//exit;

$fp = fsockopen('antispam.openapi.naver.com', '80', $errno, $errstr, 5);
$ret = '';
if($fp){
fputs($fp, $header);
while ($line = fgets($fp)) $ret .= $line;
fclose($fp);
}

// echo $ret;
list(,$pre_score) = explode('<score>',$ret);
list($score) = explode('</score>',$pre_score);

return $score;

}

네이버 OPENAPI 스팸공동대응 API 이용한거구요.

네이버 검색엔진은 한번 잘못 보이면 두번다시 크롤링 안하는 냉정한 녀석이라
신디케이션 사용하시는 분들은 스팸차단 함수 이용해서 차단을 미연에 방지하는게
좋을꺼란 생각에 간단하게 만들어본 거 랍니다.
2011/05/14 06:07 2011/05/14 06:07
<?php

require_once 'class.phpmailer.php';
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = $gmail_username;
$mail->Password = $gmail_password;
$mail->SetFrom($fromemail, '=?'.$charset.'?b?'.base64_encode($fromname).'?=');
$mail->Subject = '=?'.$charset.'?b?'.base64_encode($subject).'?=';
$mail->ContentType = $contenttype;
$mail->CharSet = $charset;
$mail->Encoding = 'base64';
$mail->Body = $contents;
$mail->AddAddress($toemail, '=?'.$charset.'?b?'.base64_encode($toname).'?=');
for($i = 0; $i < 3; $i ++) {
if($mail->Send()) return;
sleep(1);
}

라이브러리의 라이센스가 LGPL 2.1 입니다.
원본 예제대로 하면 한국어 깨지니 위처럼 하세요.
파일첨부도 되네요. 필요없어서 안해봤음.
링크2 는 발송 제한 내용.                                       
2011/05/14 06:04 2011/05/14 06:04
다운로드1         
Link1 http://yangws.myfeelclub.com/pass/msg.php (741)
파일형 체팅물 버그 다고친 알고리즘입니다.

송효진님의 봇알고리즘을 변형한 프로텍션함수도 포함되어있습니다.

송효진님 ,  칼솜님 , 공대여자는이쁘다님 의 라이센스가 붙여져있습니다.  - 결재 : ???원

송효진님 칼솜님 공대여자는이쁘다 세분모두를 사랑하셔야 사용하실수있습니다.

아래는 더하고뺄꺼없는 소스이며, 링크1번을통해 테스트하실수있습니다.

자료받기로 받아가세요.

<?
session_start();

########################################################################################################################

$ajaxtime = 1250; //ajax를 흉내낸 PHP 의 알아낼 시간 간격입니다. 다량트래픽이 유발될경우 값을 높여주십시오.(단위 : 밀리초)
$height = 400; //채팅창(내용) 부분의 높이 - 단위 : px (pixel)
$color = "#000000"; //채팅방 전체의 배경색깔 *
$fontcolor = "white"; //글꼴 색깔 *
$fontsize = 9; //글꼴 크기 - 단위 : pt (point)
$font = "Gulim"; //글꼴
$delif = 300; //일정 줄 수가 도달하면 초기화
$adtime = 100000; //광고가 뜰 확률입니다. 1부터 입력이 가능합니다. 1에 가까운 숫자일수록 뜰 확률이 높아집니다. 자동조정은 0 입력!
$deny="fuck,FUCK,FUCKYOU,fuckyou,fuck you,FUCK YOU,BOZI,bozi,BOZZI,bozzi,sex,SEX,ㅅ1발,씨발,히밤,시발,개새끼,씹새끼,십새끼,좃,보지,잠지,자지,섹스,딸딸이,10새,10새기,10새리,10세리,10쉐이,10쉑,10스,10쌔,10쌔기,10쎄,10알,10창,10탱,18것,18넘,18년,18노,18놈,18뇬,18럼,18롬,18새,18새끼,18색,18세끼,18세리,18섹,18쉑,18스,18아,c파,c팔,fuck,ㄱㅐ,ㄲㅏ,ㄲㅑ,ㄲㅣ,ㅅㅂㄹㅁ,ㅅㅐ,ㅆㅂㄹㅁ,ㅆㅍ,ㅆㅣ,ㅆ앙,ㅍㅏ,凸,갈보,갈보년,강아지,같은년,같은뇬,개같은,개구라,개년,개놈,개뇬,개대중,개독,개돼중,개랄,개보지,개뻥,개뿔,개새,개새기,개새끼,개새키,개색기,개색끼,개색키,개색히,개섀끼,개세,개세끼,개세이,개소리,개쑈,개쇳기,개수작,개쉐,개쉐리,개쉐이,개쉑,개쉽,개스끼,개시키,개십새기,개십새끼,개쐑,개씹,개아들,개자슥,개자지,개접,개좆,개좌식,개허접,걔새,걔수작,걔시끼,걔시키,걔썌,걸레,게색기,게색끼,광뇬,구녕,구라,구멍,그년,그새끼,냄비,놈현,뇬,눈깔,뉘미럴,니귀미,니기미,니미,니미랄,니미럴,니미씹,니아배,니아베,니아비,니어매,니어메,니어미,닝기리,닝기미,대가리,뎡신,도라이,돈놈,돌아이,돌은놈,되질래,뒈져,뒈져라,뒈진,뒈진다,뒈질,뒤질래,등신,디져라,디진다,디질래,딩시,따식,때놈,또라이,똘아이,똘아이,뙈놈,뙤놈,뙨넘,뙨놈,뚜쟁,띠바,띠발,띠불,띠팔,메친넘,메친놈,미췬,미췬,미친,미친넘,미친년,미친놈,미친새끼,미친스까이,미틴,미틴넘,미틴년,미틴놈,바랄년,병자,뱅마,뱅신,벼엉신,병쉰,병신,부랄,부럴,불알,불할,붕가,붙어먹,뷰웅,븅,븅신,빌어먹,빙시,빙신,빠가,빠구리,빠굴,빠큐,뻐큐,뻑큐,뽁큐,상넘이,상놈을,상놈의,상놈이,새갸,새꺄,새끼,새새끼,새키,색끼,생쑈,세갸,세꺄,세끼,섹스,쇼하네,쉐,쉐기,쉐끼,쉐리,쉐에기,쉐키,쉑,쉣,쉨,쉬발,쉬밸,쉬벌,쉬뻘,쉬펄,쉽알,스패킹,스팽,시궁창,시끼,시댕,시뎅,시랄,시발,시벌,시부랄,시부럴,시부리,시불,시브랄,시팍,시팔,시펄,신발끈,심발끈,심탱,십8,십라,십새,십새끼,십세,십쉐,십쉐이,십스키,십쌔,십창,십탱,싶알,싸가지,싹아지,쌉년,쌍넘,쌍년,쌍놈,쌍뇬,쌔끼,쌕,쌩쑈,쌴년,썅,썅년,썅놈,썡쇼,써벌,썩을년,썩을놈,쎄꺄,쎄엑,쒸벌,쒸뻘,쒸팔,쒸펄,쓰바,19금,지/랄,시/발,병/신,병신,빙신,뷩신,븅신,또라이,또롸이,십구세,십구,쉽구,애자,뮈췬,시 발,장 애,애 자,ㅅㅂ,ㅄ,ㅂㅅ,凸,쓰박,쓰발,쓰벌,쓰팔,멍청이,씁새,씁얼,씌파,씨8,씨끼,씨댕,씨뎅,씨바,씨바랄,씨박,씨발,씨방,씨방새,씨방세,씨밸,씨뱅,씨벌,씨벨,씨봉,씨봉알,씨부랄,씨부럴,씨부렁,씨부리,씨불,씨붕,씨브랄,씨빠,씨빨,씨뽀랄,씨앙,씨파,씨팍,씨팔,씨펄,씸년,씸뇬,씸새끼,씹같,씹년,씹뇬,씹보지,씹새,씹새기,씹새끼,씹새리,씹세,씹쉐,씹스키,씹쌔,씹이,씹자지,씹질,씹창,씹탱,씹퇭,씹팔,씹할,씹헐,아가리,아갈,아갈이,아갈통,아구창,아구통,아굴,얌마,양넘,양년,양놈,엄창,엠병,여물통,염병,엿같,옘병,옘빙,오입,왜년,왜놈,욤병,육갑,은년,을년,이년,이새끼,이새키,이스끼,이스키,임마,자슥,잡것,잡넘,잡년,잡놈,저년,저새끼,접년,젖밥,조까,조까치,조낸,조또,조랭,조빠,조쟁이,조지냐,조진다,조찐,조질래,존나,존나게,존니,존만,존만한,좀물,좁년,좁밥,좃까,좃또,좃만,좃밥,좃이,좃찐,좆같,좆까,좆나,좆또,좆만,좆밥,좆이,좆찐,좇같,좇이,좌식,주글,주글래,주데이,주뎅,주뎅이,주둥아리,주둥이,주접,주접떨,죽고잡,죽을래,죽통,쥐랄,쥐롤,쥬디,지랄,지럴,지롤,지미랄,짜식,짜아식,쪼다,쫍빱,찌랄,창녀,캐년,캐놈,캐스끼,캐스키,캐시키,탱구,팔럼,퍽큐,호로,호로놈,호로새끼,호로색,호로쉑,호로스까이,호로스키,후라들,후래자식,후레,후뢰,8억,새끼,개새끼,소새끼,병신,지랄,씨팔,십팔,니기미,찌랄,지랄,쌍년,쌍놈,빙신,좆까,니기미,좆같은게,잡놈,벼엉신,바보새끼,씹새끼,씨발,씨팔,시벌,씨벌,떠그랄,좆밥,추천인,추천id,추천아이디,추천id,추천아이디,추/천/인,쉐이,등신,싸가지,미친놈,미친넘,찌랄,죽습니다,님아,님들아,씨밸넘";//욕설 필터링 리스트
########################################################################################################################

//header의 Expires 설정용 구문
header("Expires: ".gmdate("D, d M Y H:i:s", time())." GMT");

// W3C P3P 규약설정
header ("P3P : CP=\"ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC\"");

// no-cache 설정.
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

# register_globals = Session 정의.
ini_set('register_globals','1');
ini_set('session.bug_compat_42','1');
ini_set('session.bug_compat_warn','0');
ini_set('session.auto_start','1');

//header의 만료시기 안뜨게 설정.
unset($REQUEST_METHOD);

//버젼 및 한글화 루틴.
$ev = "euc-kr";
$ver = "3.0";

//euc-kr 인지아닌지 검사루틴.
function check_inc($msg)
{
    $len = strlen($msg);
    $stepsize = 1;
    for($i=0; $i<$len; $i = $i + $stepsize){
        if( (ord($msg[$i]) & 0x80) == 0x80 ){
            //깨진 캐릭터
            if( ord($msg[$i+1]) == 0x00 ){
                return true;
            }

            //euckr 범위에 있는지도 검사
            if(!( ord($msg[$i]) >= 0xB0 && ord($msg[$i]) <= 0xC8 && ord($msg[$i+1]) >= 0xA1 && ord($msg[$i+1]) <= 0xFE )){
                return true;
            }

            $stepsize = 2;
        }else{
            $stepsize = 1;
        }
    }
    return false;
}


// 한글자르기 함수
function cut_str($msg,$len,$_deleted) {
if(strlen($msg) > $len) {
$msg = substr($msg, 0, $len + 1);
$end = $len;
while(ord($msg[$end]) > 127) $end--;
if(($len - $end) % 2){ $msg = substr($msg, 0, $len)."..";}
else {$msg .= "..";}
function substr_kr($str,$start,$len,$last) {
  if (strlen($str) < $len) return $str;
  $str_kr    = trim(substr($str,$start,$len));
  if (! ( strlen(str_replace(" ","..",$str_kr)) % 2 ) ) return $str_kr.$last;
  else return substr($str_kr,0,$len -1).$last;
}
}
return $msg;
}

// 전역변수 초기화.
    @extract($_GET);
    @extract($_POST);
    @extract($_SERVER);
    @extract($_COOKIE);
    @extract($_REQUEST);

if (isset($HTTP_POST_VARS) && !isset($_POST)) {
$_POST = &$HTTP_POST_VARS;
$_GET = &$HTTP_GET_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
$_ENV = &$HTTP_ENV_VARS;
$_FILES = &$HTTP_POST_FILES;

if (!isset($_SESSION))
$_SESSION = &$HTTP_SESSION_VARS;
}

// 익스와 넷스케이프일때 처리
if(eregi("msie",$HTTP_USER_AGENT)) $browser="1";else $browser="0"; {
// 파이어폭스 처리
if(eregi("Firefox",$HTTP_USER_AGENT)) $browser="1"; else $browser="0";
// 오페라 처리
if(eregi("Opera",$HTTP_USER_AGENT)) $browser="1"; else $browser="0";
// 모잘라 처리
if(eregi("Mozilla",$HTTP_USER_AGENT)) $browser="1"; else $browser="0";
}

//사이즈를 넷쓰와 익스일때 구분하여 리턴
function size($dbo) {
    global $browser;
    if(!$browser) return " size=".($dbc)." ";
    else return " size=$dbc ";
    }
    function size2($dbo) {
        global $browser;
        if(!$browser) return " cols=".($dbc)." ";
        else return " cols=$dbc ";
    }
    

//경로를 벗어나면 다시 확장자명 으로 잡아주는 필터링.
if(getenv("REQUEST_METHOD") == $_SERVER['PHP_SELF']);

// 디렉토리를 검사함
    if(!is_dir("log_data/")) {
    @mkdir("log_data/",0777);
    @chmod("log_data/",0706);
    echo "빈 화면이 보이시면, 새로고침을 하여주세요. [로그데이타 폴더생성 작업화면]";
    echo "<meta http-equiv='refresh' content='3;url=./msg.php#ad'>";
    echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
    return;
    }
    if(!is_dir("msg_ban/")) {
    @mkdir("msg_ban/",0777);
    @chmod("msg_ban/",0706);
    echo "빈 화면이 보이시면, 새로고침을 하여주세요. [강퇴리스트 폴더생성 작업화면]";
    echo "<meta http-equiv='refresh' content='3;url=./msg.php#ad'>";
        echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
    return;
    }
    if(!is_dir("con_user/")) {
    @mkdir("con_user/",0777);
    @chmod("con_user/",0706);
    echo "빈 화면이 보이시면, 새로고침을 하여주세요. [현재접속자폴더생성 작업화면]";
    echo "<meta http-equiv='refresh' content='3;url=./msg.php#ad'>";
        echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
    return;
    }
// 아이피 강퇴 파일 만들기.
    if(!file_exists("msg_ban/_ban.dat")) {
        echo "빈 화면이 보이시면, 새로고침을 하여주세요. [강퇴 아이피파일 생성 작업화면]";
        echo "<meta http-equiv='refresh' content='3;url=./msg.php#ad'>";
        $ban = @fopen("msg_ban/_ban.dat", "a+");
        echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
    return;
    }
// htaccess 생산.
    if(!file_exists("msg_ban/.htaccess")) {    
    echo "빈 화면이 보이시면, 새로고침을 하여주세요. [강퇴작업폴더 보안패치 작업화면]";
    echo "<meta http-equiv='refresh' content='3;url=./msg.php#ad'>";
    $ban = fopen("msg_ban/.htaccess", "w+");
    @fwrite($fpu0, "RewriteEngine On
    RedirectMatch /(.*)$ about:blank
    forcetype application/octet-stream");
    return;
    }
    if(!file_exists(".htaccess")){
    echo "빈 화면이 보이시면, 새로고침을 하여주세요. [채팅프로그램 보안패치 작업화면]";
    echo "<meta http-equiv='refresh' content='3;url=./msg.php#ad'>";
    $index = fopen(".htaccess", "w+");
    @fwrite($fpu0, "RewriteEngine On
    RedirectMatch /(.*)$ about:blank
    forcetype application/octet-stream");
    return;
    }
    
//자동봇 탐지 프로텍팅 엔진.
if(!($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1' && $_SERVER['HTTP_USER_AGENT'] == 'Shockwave Flash')) {
    if($_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.1' || !isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
    if($_SERVER['HTTP_X_FORWARDED_FOR'] != 'HTTP_X_FORWARDED_FOR' || !isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
    if($_SERVER['SERVER_PROTOCOL'] != 'HTTP_X_FORWARDED_FOR' || !isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
        if(count($_POST) != 0) {
        $fp = fopen('./log_data/postdata.txt', 'a');
        fwrite($fp, $_SERVER['REMOTE_ADDR']."\n");
        fwrite($fp, print_r($_POST, true));
        fwrite($fp, print_r($_GET, true));
        fwrite($fp, print_r($_SERVER, true));
        fwrite($fp, "---------------------\n");
        fclose($fp);
        exit;
    }
    if(!preg_match('/BlackBerry|Daum|EMPAS\.ROBOT|Gigabot|Googlebot|NaverBot|Snapbot|Speedy\|SurveyBot|Twiceler|Yahoo|Yeti|MFeedBot|msnbot|webcollage|yoofind|xMind|BrightCrawler|NimbleCrawler|StackRambler|SurveyBot|ia_archiver/', $_SERVER['HTTP_USER_AGENT'])) {
    $fp = fopen('./log_data/agents.txt', 'a');
    fwrite($fp, $_SERVER['HTTP_USER_AGENT']."\n");
    fwrite($fp, $_SERVER['REMOTE_ADDR']."\n");
    fwrite($fp, "---------------------\n");
    fclose($fp);
    echo "
    <script language=javascript>
    alert('크로스경비병 입니다. 다음과 같은 제약으로 접속하실수없습니다.\\n\\n인터넷 옵션 에서 프록시 설정을 제거하셔야 접속하실 수 있습니다.');
    history.go(-1);
    </script>";
    }
        exit;
            }
        }
    }
}

//동시접속 차단 프로텍션.
$IP=$_SERVER['REMOTE_ADDR'];
setcookie ("IP","$IP",0,"/");
$_POST['IP'] = serialize($IP);
if(isset($_POST['$IP'])) $IP = $_POST['IP'];
if(isset($_COOKIE['IP'])&&$_COOKIE['IP']/2>=1) {
    if(count($_POST) != 0) {
    if(!file_exists($IP.".dat")) {
        echo "빈 화면이 보이시면, 새로고침을 하여주세요. [동시접속 차단 프로텍션 작동.]";
        echo "<meta http-equiv='refresh' content='3;url=./msg.php#ad'>";
        $IP_ADDRES = @fopen($IP.".dat", "a+");
        @fwrite($IP_ADDRES, print_r($_SERVER['REMOTE_ADDR']." \n", true));
        @fwrite($IP_ADDRES,date("Y-m-d H:i:s")." \n",true);
        echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
        return;
        }
    }
}

//동시접속 처리 알고리즘. [아이피와 현재시간과 이전시간 비교]
/*
$IP_ADDRES = @fopen($IP.".dat","r");
$IP_ADDRES = @fread($IP_ADDRES, filesize($IP.".dat"));
$old_day = date("Y m d H i s", $IP.".dat");
$old_day = @fopen($IP.".dat", "r");
$new_day = date('Y-m-d H:i:s');
$old_day = @strtotime($old_day);
$new_day = @strtotime($new_day);
if ($old_day < $new_day) {
if ($_SERVER['REMOTE_ADDR']&&$_SERVER['REMOTE_ADDR']) {
if(date("Y-m-d H:i:s")<=$IP_ADDRES) {
    print('본 사이트에 이중 접속을 하셨습니다. 혹은 지원되지않은 환경이라 볼수없습니다. 관리자에게 문의하세요!');
    print('네이트 Msn - yangws13@nate.com 으로 연락주시면 됩니다.');
    exit;
            }
        }
    }else {
    print('처음접속을 환영합니다.');
}
*/

//아이피 블랙리스트 접근 감시 루틴.
    $banlist = @fopen("./msg_ban/_ban.dat", "r");
    while(!feof($banlist)){
    $dlist .= fgets($banlist);}
    if(@eregi($_SERVER[REMOTE_ADDR],$dlist)){echo "$_SERVER[REMOTE_ADDR]"." 님께서는, 아이피 강퇴 되셨습니다.";
    exit;
    }

//동시접속 접근 감시 루틴.
/*
    $banlist = @fopen($IP.".dat","r");
    while(!@feof($banlist)){
    $dlist .= @fgets($banlist);}
    if(@eregi((date("Y-m-d H:i:s").$dlist))){echo "$_SERVER[REMOTE_ADDR]"." 님께서는, 이중으로 접속하여 종료합니다.";
    exit;
    }
*/

// 현재접속자 루틴함수.
$r_time = 15; // 화면 갱신 간격 (초)
$w_time = 20; // 접속 지연 시간 (초)
$FILE = @fopen("con_user/$REMOTE_ADDR","w+"); // 현재 IP를 파일명으로 지정 (쓰기 모드)
$info = time();
@fputs($FILE,$info);
@fclose($FILE);
$user[] = $REMOTE_ADDR;
if(!$user){
$user=$_SERVER['REMOTE_ADDR'];
$user= explode(".",$value);
$user = $user[0].".".$user[1].".x.".$user[3];
}
$USER1 = opendir("con_user");
while($entry=readdir($USER1)) if($entry!="."&&$entry!="..") {
    if ($REMOTE_ADDR != $entry) {
    $info = file("con_user/$entry");
    if((time()-$w_time)>chop($info[0])) @unlink("con_user/$entry");
    else $user[] = $entry;
  }
}
$total_user = count($user);
$ip = implode("\n",$user);

// 전역변수 점검.
$ext_arr = array ('PHP_SELF', '_ENV', '_GET', '_POST', '_FILES', '_SERVER', '_COOKIE', '_SESSION', '_REQUEST',
                  'HTTP_ENV_VARS', 'HTTP_GET_VARS', 'HTTP_POST_VARS', 'HTTP_POST_FILES', 'HTTP_SERVER_VARS',
                  'HTTP_COOKIE_VARS', 'HTTP_SESSION_VARS', 'GLOBALS');
$ext_cnt = count($ext_arr);
for ($i=0; $i<$ext_cnt; $i++) {
    // GET 으로 선언된 전역변수가 있다면 unset() 시킴
    if (isset($_GET[$ext_arr[$i]])) unset($_GET[$ext_arr[$i]]);
}

if(!$adtime){
$adtime = round(($ajaxtime/4)*$fontsize,0)*3;
$adtime = $adtime*round($height/8,0);
$adtime = round($adtime/6,0);
}

if($_GET['allview']){
?>
<meta http-equiv="Content-Type" content="text/html; charset=<?=$ev?>" />
<meta http-equiv="Page-Enter" content="BlendTrans(Duration=0.2)" />
<meta http-equiv="Page-exit" content="BlendTrans(Duration=0.5)" />
<style type='text/css'>
* {background-color: <?=$color?>;font-size:<?=$fontsize?>pt;margin:1px;color:<?=$fontcolor?>;font-family:<?=$font?>}
</style>
<title>:: 전체내용보기 :: <?=$_SERVER['PHP_SELF']?></title>
<div style='text-align:center;font-weight:bold;font-size:12pt'>전체내용보기</div>
<?
$dbo = @fopen("./memo.dat", "r");
$db = @fread($dbo, filesize("./memo.dat"));
$db = explode("\n", $db);

$dbc = count($db);

for($i=0;$i<$dbc;$i++){ //for 시작
if(!$a && $db[$i]){ //if 시작
$namesave = $db[$i];
echo "<font style='font-size:8pt'>name</font><b>".$db[$i]."</b> | ";
$a="1";
}else if($a=="1"){ //else if시작
$a="2";
echo $db[$i];
}else{$sss=$dbc-1; if($i==($sss)){echo "<a name='ad'></a>";} //else if 시작
$a="";if($db[$i]){if(eregi("-/",$namesave)){$db[$i]="관리자_".$db[$i];}}
echo "  <font style='font-size:8pt;color:yellow'>(".$db[$i].")</font><br />";}
}

exit;}

if($_GET['getdat']){
?>
<meta http-equiv="Content-Type" content="text/html; charset=<?=$ev?>" />
<meta http-equiv="Page-Enter" content="BlendTrans(Duration=0.2)" />
<meta http-equiv="Page-exit" content="BlendTrans(Duration=0.5)" />
<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />
<script type='text/javascript'>/*![CDATA[*/setTimeout("location.reload();",<?=$ajaxtime?>);/*}}>*/</script>
<?
if($_SESSION['size']!=filesize("memo.dat")){
?>
<script type='text/javascript'>/*![CDATA[*/parent.chatframe.location.reload();top.document.title='새 글이 올라왔습니다!';/*}}>*/</script>
<?
}
$_SESSION['size']=filesize("memo.dat");
exit;
}


if($_GET['out']){
$dbsa = @fopen("./memo.dat", "a");
unlink($IP.".dat");
fwrite($dbsa, "**>퇴장안내 \n ".$_SESSION['n']." 님이 퇴장하셨습니다! \n ".date("Y-m-d H:i:s")." \n");
$_SESSION['lt']="";$_SESSION['n']="";
echo "<script type='text/javascript'>self.close()</script>";exit;
}
$denys=explode(",",$deny);
$dcount = count($denys);

//광고 메커니즘.
if(!$_GET['ok']){
$dbs = @fopen("./memo.dat", "a");
$ra = rand(0,$adtime);
if($ra==0){
fwrite($dbs, "- 광고 : \n <a href='http://yangws.myfeelclub.com' target='_d' style='font-weight:bold;color:blue;background:white'>웹해킹 게임이있는 그곳!</a>\n 1번광고 \n");
}
if($ra==1){
fwrite($dbs, "- 광고 : \n <a href='http://yangws.myfeelclub.com' target='_d' style='font-weight:bold;color:blue;background:white'>공개용 크리스 경비병 다운로드!</a>\n 2번광고 \n");
}
if($ra==2){
fwrite($dbs, "- 광고 : \n <a href='http://yangws.myfeelclub.com' target='_d' style='font-weight:bold;color:blue;background:white'>Php 자료 가 풍부한 그곳 !</a>\n 3번광고 \n");
}
if($ra==3){
fwrite($dbs, "- 광고 : \n <a href='http://yangws.myfeelclub.com' target='_d' style='font-weight:bold;color:blue;background:white'>Javascript 가 풍부한 그곳!</a>\n 4번광고 \n");
}
if($ra==4){
fwrite($dbs, "-- 참고 : \n <a style='font-weight:bold;color:blue;background:white;cursor:normal'>관리자는 이름 앞에 '-/' 이 붙습니다!</a>\n @공지@ \n");
}
if($ra==5){
fwrite($dbs, "-- 참고 : \n <a style='font-weight:bold;color:red;background:white;cursor:normal'>본 계정은 마이필 클럽계정에 종속되어 있습니다.</a>\n @공지@ \n");
}
if($ra==6){
fwrite($dbs, "-- 참고 : \n <a style='font-weight:bold;color:red;background:white;cursor:normal'>항상 즐거운 해킹 되세요 감사합니다.</a>\n @공지@ \n");
}
if($ra==7){
fwrite($dbs, "-- 참고 : \n <a style='font-weight:bold;color:red;background:white;cursor:normal'>불법 해킹은 몸에 해롭습니다. 건전한 화이트 해커가 되세요.</a>\n @공지@ \n");
}
if($ra==8){
fwrite($dbs, "-- 참고 : \n <a style='font-weight:bold;color:red;background:white;cursor:normal'>트레이닝 문제의 정답을 기록하시면 안됩니다. 강력조치합니다!</a>\n @공지@ \n");
}
if($ra==9){
fwrite($dbs, "-- 참고 : \n <a style='font-weight:bold;color:red;background:white;cursor:normal'>본사이트 주소는 http://yangws.myfeelclub.com 입니다.</a>\n @공지@ \n");
}
if($ra==10){
fwrite($dbs, "-- 참고 : \n <a style='font-weight:bold;color:blue;background:white;cursor:normal'>오늘도 좋은 하루와 운이 함께하시길 바랍니다.</a>\n @공지@ \n");
}
    }

//채팅방 청소 기능.
if($_GET['reset']&&$_SESSION['lt']){
@unlink("memo.dat");
$d = fopen("memo.dat", "w");
fwrite($d, "<div align='center' style='font-weight:bold;color:blue;background:white'>* * 관리자에 의해 초기화 되었습니다. * *</div>");
echo "<script type='text/javascript'>alert('초기화 되었습니다!');location.href='msg.php#ad';</script>";
exit;}
//로그아웃 기능.
if($_GET['logout']){
$_SESSION['lt']="";
echo "<script type='text/javascript'>alert('로그아웃 되었습니다!');location.href='msg.php#ad';</script>";
exit;}
if(NULL==file_exists("memo_pwd.dat") && $_GET['pwd']){
$d = fopen("memo_pwd.dat", "w");
$p = $_GET['pwd'];
$p = md5($p);
fwrite($d, $p);
echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
exit;}
if(NULL==file_exists("memo_pwd.dat")){
?>
<!-- chatting Install Mode -->
<form method='get' action='msg.php'>
사용할 비번 : <input type='text' name='pwd' /><input type='submit' value='설치' style='border: solid 1px #CCCCCC;font-weight:bold;font-size:8pt' />
</form>
<?
exit;}

//로그인 기능.
if($_GET['login']){
$fp = fopen("memo_pwd.dat", "r");
$fps = fread($fp, filesize("memo_pwd.dat"));
$ls = $_GET['login'];
$ls = md5($ls);
echo "관리자 모드로 로그인중입니다...";
if(strchr($ls,$fps)){
$_SESSION['lt']="ADMIN";
echo "로그인성공!<script type='text/javascript'>alert('로그인되셨습니다!');location.href='msg.php#ad';</script>";
}else{
echo "<script type='text/javascript'>alert('비밀번호가 일치하지 않습니다!');location.href='msg.php#ad';</script>";
}
exit;}
//리스트 목록 보여주기.
if($_GET['reset']&&$_SESSION['lt']){
unlink("memo.dat");
echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
exit;}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?=$ev?>" />
<meta http-equiv="Page-Enter" content="BlendTrans(Duration=0.2)" />
<meta http-equiv="Page-exit" content="BlendTrans(Duration=0.5)" />
<title>:: [채팅방] :: <?=$_SERVER['PHP_SELF']?></title>
<!-- 폰트Size 설정부분. -->
<style type='text/css'>
* {background-color: <?=$color?>;font-size:<?=$fontsize?>pt;margin:1px;color:<?=$fontcolor?>;font-family:<?=$font?>}
</style>
<!-- 밑줄 없애기 설정부분. -->
<style type='text/css'>
<!--
a { font-family: ''; text-decoration: none}
-->
</style>

<!-- 프레임 자동 조절 -->
<script language="javascript" src="http://".util_get_host()."/pass/resizeiframe.js"></script>

<!-- 리프레쉬 Ajax -->
<script type='text/javascript'>
/*![CDATA[*/
var isie = (document.all)? 1:0;
var xmlHttp = true;
var strc = '';
if(isie){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else{ // if(window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
}

function getData(dataSource)
{
    if(xmlHttp) {
            xmlHttp.open('POST', dataSource, true);
            xmlhttp.setRequestHeader("Content-type", "application/x-www-urlencoded; charset=euc-kr");
    xmlHttp.onreadystatechange = function(){
            if(xmlHttp.readyState=='4' && xmlHttp.status=='200' || xmlHttp.responseText){
                strc = xmlHttp.responseText;
            }
        }
    xmlHttp.send();
    }
}
setTimeout("getData('msg.php')", 5000);
/*}}>*/
</script>

<!-- 제목 타이틀 설정부분. -->
<script type='text/javascript'>/*![CDATA[*/
setTimeout("title()", 1500);
function title(){
var ttle = ":: [채팅방] :: <?=$_SERVER['PHP_SELF']?>";
document.title = ttle;
setTimeout("title()", 1500);
}

function login(){
d = document.getElementById('c').value;
location.href='?login='+d;
}

function sout(){
var s = window.open('msg.php?out=1');
s.focus();
self.close();
}
/*}}>*/
</script>
<!-- 넷스케이프 사용자 입장금지. -->
<script>
function enterance()
  {
    if (navigator.appName == "navigator.appName" || navigator.appName == "Netscape"){
      alert('넷스케이프 사용자는 입장할 수 없습니다');
      return;
    }
    else
        {
        location='./link.html';
        }
}
</script>
<!-- 특수키 키보드 막기. -->
<script>
function keydown(){
          if(event.keyCode==122 || event.altKey==true || event.altLeft==true){
                event.keyCode=0;
                event.cancelBubble = true;
                event.returnValue = false;
                alert('이 특수키는 사용할 수 없습니다.');
        }       
    }
  document.onkeydown=keydown;
</script>

<!-- 특수키 키보드 막기. -->
<script>
function cancelRefresh() {
    // keycode for F5 function
    if (window.event && window.event.keyCode == 116) {
        window.event.keyCode = 8;
    }
}
</script>

</head>
<?
if($_GET['content']){
//echo "<body onload=\"parent.document.getElementById('c').focus()\" />";
?>
<script type='text/javascript'>
window.onload=function(){
var pagebottom = document.body.scrollHeight;
window.scrollTo(0, pagebottom);
}</script>
<?
//메모 파일 접근, 셋팅된 내용갯수 파악후 초기화 루틴.
$dbo = @fopen("./memo.dat", "r");
$db = @fread($dbo, filesize("./memo.dat"));
$db = explode("\n", $db);

$dbc = count($db);

if($dbc>($delif*3)){
unlink("memo.dat");
$d = fopen("memo.dat", "w");
fwrite($d, "<div align='center' style='font-weight:bold;color:blue;background:white'>* * * 관리자가 '$delif'개 까지의 채팅내용을 저장하도록 지정하여, 서버에 의해 내용이 삭제되었습니다. * * *</div>");
echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
exit;
}

for($i=0;$i<$dbc;$i++){
if(!$a && $db[$i]){
$namesave = $db[$i];
echo "<font style='font-size:8pt'>name</font><b>".$db[$i]."</b> | ";
$a="1";
}else if($a=="1"){
$a="2";
echo $db[$i];
}else{$sss=$dbc-1; if($i==($sss)){echo "<a name='ad'></a>";}
$a="";if($db[$i]){if(eregi("-/",$namesave)){$db[$i]="관리자_".$db[$i];}
echo "  <font style='font-size:8pt;color:yellow'>(".$db[$i].")</font><br />";}
}
}

exit;}
if(!$_GET['ok']){?>
<!-- 메뉴 삽입구역 -->
<div align="center">
    <table width="298" cellspacing="0" style="border-width:1; border-color:rgb(51,51,51); border-style:ridge; border-collapse:collapse;" cellpadding="0" border="0" height="23">
        <tr>
            <td width="1" height="2"></td>
            <td width="97" height="2"></td>
            <td width="103" height="2"></td>
            <td width="95" height="2"></td>
        </tr>
        <tr>
            <td width="1" height="21"></td>
            <td width="96" style="border-width:1; border-color:rgb(51,51,51); border-style:groove;" height="21">

                <p align="center"><b><a href="http://yangws.myfeelclub.com/bbs/zboard.php?id=PassBbs" title="경비병 게시판 으로 이동합니다 !"><span style="font-size:10pt;"><font color="white">자유게시판</font></span></a></b></p>
            </td>
            <td width="102" style="border-width:1; border-color:rgb(51,51,51); border-style:groove;" height="21">

                <p align="center"><b><a href="http://yangws.myfeelclub.com/bbs/zboard.php?id=query_Q" title="경비병 트레이닝 문제를 시작합니다 !"><span style="font-size:10pt;"><font color="white">트레이닝 문제</font></span></a></b></p>
            </td>
            <td width="94" style="border-width:1; border-color:rgb(51,51,51); border-style:groove;" height="21">

                <p align="center"><b><a href="http://yangws.myfeelclub.com/pass/msg.php" title="크리스 경비병 체팅방으로 이동합니다."><span style="font-size:10pt;"><font color="white">채팅방접속</font></span></a></b></p>
            </td>
        </tr>
    </table>
<!-- 메뉴 삽입 여기까지  -->
</div>
<body onload="document.getElementById('c').focus()" />
<!-- iframe 출력 부분 -->
<iframe src='?content=1#ad' id='chatframe' name='chatframe' width='98%' height='<?=$height?>px' frameborder='0' scrolling='yes' style='overflow-x:hidden'>
<iframe src='?getdat=1' style='display:none' width='1px' height='1px'></iframe>
<form method='post' action='?ok=ok&frame=1'>
<?
//사용자 입장 출력 기능.
if(!$_SESSION['n']){
$_tmp = substr(md5($_SERVER['REMOTE_ADDR']),0,6);
$_SESSION['n']=$_tmp.rand(1000,9999);
if(!$_GET['ok']){
$dbsa = @fopen("./memo.dat", "a");
fwrite($dbsa, "**>입장안내 \n ".$_SESSION['n']." 님이 입장하셨습니다! \n ".date("Y-m-d H:i:s")." \n");
}
}
?>
<script type='text/javascript'>/*<![CDATA[*/
setTimeout("document.getElementById('c').focus()",800);
/*]]>*/</script>

<!-- Adtime : <?=$adtime?> [sec(s)] -->
<!-- 입력 받을부분 메뉴 -->
<input type='text' name='n' size='10' value='<?=$_SESSION['n']?>' style='border: solid 1px white' /><input type='text' id='c' name='c' value='<?=$_GET['bak_c']?>' size='50' style='border: solid 1px white' /><input type='submit' onclick='check()' value='입력' style='border: solid 1px #CCCCCC;font-weight:bold;font-size:8pt'/>
<?if(!$_SESSION['lt']){?>
<!-- 관리자로그인 받을부분 메뉴 -->
<input type='button' onclick='login()' value='Login' title='관리자로그인(비번입력후)' style='border: solid 1px #CCCCCC;font-weight:bold;font-size:6pt' />
<?}else{?>
<!-- 관리자 메뉴 명령어 받을부분 메뉴 -->
<input type='button' onclick="location.href='?logout=1'" title='로그아웃' style='border: solid 1px #CCCCCC;font-weight:bold;font-size:6pt' value='Logout' />
<input type='button' onclick="location.href='?reset=1'" title='내용 초기화' style='border: solid 1px #CCCCCC;font-weight:bold;font-size:6pt' value='Reset' />
<?}?>
<!-- 기타 메뉴 받을부분 메뉴 -->
<input type='button' onclick="var win=window.open('?allview=1');win.focus()" title='전체내용보기' style='border: solid 1px #CCCCCC;font-weight:bold;font-size:9pt' value='전체내용보기' />
<input type='button' onclick="sout()" title='나가기' style='border: solid 1px #CCCCCC;font-weight:bold;font-size:9pt' value='나가기' />
<br />최대 80Bytes 까지 작성가능합니다.
</form>
<?}else{
$dbs = @fopen("./memo.dat", "a");

//악성 스크립트 문자열로 바꾸기 루틴.
global $n, $c;
$n = stripslashes($_POST['n']);
$c = stripslashes($_POST['c']);

// notice_! 명령어 실행시...
if($_SESSION['lt'] && eregi("notice_!",$c)){
$c = str_replace("notice_!", "", $c);
fwrite($dbs, "<font style='color:yellow'>★공★지★</font> \n <font style='font-weight:bold;color:red;background:white;font-size:10pt'>".$c."</font> \n (".date("Y-m-d H:i:s").") \n");
echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
exit;
}
//ban_! 명령어 실행시...
if($_SESSION['lt']&&eregi("ban_!",$c)){
$c = str_replace("ban_!", "", $c);
$c = str_replace(" ", "", $c);
$c = str_replace("abcdefghijklmnopqrstuvwxyz!@#$%^&*()_+|","",$c);
if(!filesize("msg_ban/_ban.dat")){$dabs = fopen("msg_ban/_ban.dat", "w+");fwrite($dabs, "_\n");fclose($dabs);}
$ban = fopen("msg_ban/_ban.dat", "a+");
fwrite($ban, $c."\n");
echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
}

// ban_cls_! 명령어 실행시...
if($_SESSION['lt'] && eregi("ban_cls_!",$c)){
$c = str_replace("ban_cls_!", "", $c);
$c = str_replace(" ", "", $c);
if($c!="all"){
$dlist = str_replace($c."\n", "", $dlist);
}else{$dlist="\n";}
$ban_cless = fopen("msg_ban/_ban.dat", "w");
fwrite($ban_cless, $dlist);
fclose($ban_cless);
fwrite($dbs, "<font style='color:yellow'>★알★림★</font> \n <font style='font-weight:bold;color:blue;background:white;font-size:10pt'>강퇴된 아이피가 초기화 되었습니다.</font> \n (".date("Y-m-d H:i:s").") \n");
echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
exit;
}

if(!$_SESSION['lt']){$n = strip_tags(substr($n,0,15));}

//도배 방지기능 함수.
if(!$_SESSION['last_content'])$_SESSION['last_conetnt']= sha1(md5(rand(0,300)));
if(!$_SESSION['last_num'])$_SESSION['last_num']=0;

if(@eregi($_SESSION['last_content'],$c) && $_SESSION['last_content']){
$_SESSION['last_content'] = $c;
$_SESSION['last_num']++;
if($_SESSION['last_num']>4){
$_SESSION['last_num']=0;
echo "<script type='text/javascript'>alert('도배방지 솔루션이 작동하였습니다!');location.href='{$_SERVER[HTTP_REFERER]}';</script>";
exit;
}
}
$_SESSION['last_content'] = $c;

// 빈문자열 경우 리턴
function isblank($str) {
    $c=str_replace(" ","",$c);
    $c=str_replace("\n","",$c);
    $c=strip_tags($c);
    $c=str_replace(" ","",$c);
    $c=str_replace(" ","",$c);
    if(eregi("[^[:space:]]",$c)) return 0;
    return ;
    }

//부적절한 루틴 필터링 함수.
$c = str_replace("&", "&amp;", $c);
$n = str_replace("ⓒ", "©", $n);

$c = str_replace("ː", "", $c);
$n = str_replace("ː", "", $n);

$c = str_replace("\n", "", $c);
$n = str_replace("\n", "", $n);

$c = str_replace("<", "<", $c);
$n = str_replace("<", "<", $n);

$c = str_replace(">", ">", $c);
$n = str_replace(">", ">", $n);

// 한글자르기 루틴.
if(strlen($c)>80 && !eregi("http://([^\"'<>\r\n\s+)`i",$c))$c = cut_str($c,80,2);
else if(strlen($c)>80 && !eregi("http://([^\"'<>\r\n\s+)`i",$c))$c = substr_kr($c,80,2);

$c = preg_replace("`http://([^\"'<>\r\n\s]+)`i", "<a target='_blank' title='링크로 이동' href='http://$1'>http://$1</a>", $c);

    // URL, Mail을 자동으로 체크하여 링크만듬
    function autolink($c) {
        // URL 치환
        $index_pattern = "/([^\"\'\=\>])(mms|http|HTTP|ftp|FTP|telnet|TELNET)\:\/\/(.[^ \n\<\"\']+)/";
        $c = preg_replace($index_pattern,"\\1<a href=\\2://\\3 target=_blank>\\2://\\3</a>", $c);

        // 메일 치환
        $email_pattern = "/([ \n]+)([a-z0-9\_\-\.]+)@([a-z0-9\_\-\.]+)/";
        $c = preg_replace($email_pattern,"\\1<a href=mailto:\\2@\\3>\\2@\\3</a>", $c);

        return $c;
    }

// 홈페이지 주소가 올바른지 검사
function isHomepage( $c ) {
    if(eregi("^http://([a-z0-9\_\-\./~@?=&-\#{5,}]+)", $c)) return $c;
    else return ;
    }

//if(!$c){$c="<b>내용을 입력하십시오!</b>";}
if(!$c){echo "<script type='text/javascript'>alert('메시지를 입력하세요.'); location.href='{$_SERVER[HTTP_REFERER]}';</script>";exit;}
if(!$n){$n="NoName".rand(0,99999);}

//관리자가 아닐때...
if(eregi("-/",$n) && !$_SESSION['lt']){
$n ="사칭_".rand(0,99999);
}
//관리자 표시...
if($_SESSION['lt']){
if(!eregi("-/",$n))$n="-/".$n;
}

//욕설일경우, 욕설 루틴 실행.
for($den=0;$den<=$dcount;$den++){
if(@eregi($denys[$den],$c)){
$denstr = round(strlen($denys[$den])/2,0);
$denr="[욕설_";
for($dst=1;$dst<=$denstr;$dst++){$denr=$denr."*";}
$denr=$denr."_욕설]";
$c = str_replace($denys[$den], $denr, $c);
break;
}
}

//euc-kr 및 uft-8 인코딩 엔진
function ToEucKr( $msg){
    return iconv("UTF-8","euc-kr//IGNORE",$msg );
}
function ToUTF8( $msg){
    return iconv("euc-kr","UTF-8",$msg);
}

$_SESSION['n']=$n;

fwrite($dbs, $n."\n".$c."\n".$_SERVER[REMOTE_ADDR]."\n");
echo "<script type='text/javascript'>location.href='msg.php#ad';</script>";
exit;}
?>
<hr noshade='noshade' />
<div style="font-size:9pt;"> <? echo "<p title='$ip'>현재 접속자 :"."$total_user 명</p>"; // 출력 ?></div>
<!-- 라이센스 -->
<div align='right' style='text-align:right;font-size:9pt'>Crade by(yamgws13) <a href='http://yangws.myfeelclub.com/' style='font-weight:bold;font-size:8pt' target='_down'>Click!</a></div>
</html>
2011/03/06 10:29 2011/03/06 10:29
JPEG의 이미지 metadata 정보를 얻어오는 클래스 라이브러리 입니다.
PHP에서 제공하는 exif관련 함수를 전혀 사용하지 않고 hexData를 분석하여 추출해 내므로 별도의 EXIF 관련 외부 라이브러리를 설치하지 않으셔도 이용하실 수 있습니다.





사용하는 법은 아래와 같습니다.

<?php
$exif = new exif('image.jpg');

print_r($exif ->getImageInfo());
?>

exif::exif() 함수로 읽어올 이미지 파일을 설정한후
exif::getImageInfo() 함수로 해당 이미지의 EXIF 및 기타 모든 정보를 리턴받습니다.




- 클래스 설명
- exif class
*exif::exif("(string)파일경로", "(string)언어설정(en|ko)", "(boolen)디버그 정보 출력여부");
*exif::getImageInfo(void);


라이센스는 기본 MIT 을 따릅니다.
Copyright (c) 2010 M_FireFox

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.



ASP 용은 없을까 검색해 보니 있네요.

http://www.spaz.com/mr/work/aspexiffuncs/
2011/03/06 10:15 2011/03/06 10:15
블로그 모듈 만들면서 날짜 데이터를 간소하게 출력할 필요성이 생겨서 만들어놓은건데 필요하신분이 계실거라 생각해서 올려봅니다.
허접한 소스라 입맛에 맛게 고쳐서 쓰시면 될것같아요;;
 
========================================================
#출력예제

echo diffDate('2010-01-01 00:00:20','2010-02-07 12:01:20');
//result : 1달 전

echo diffDate('2010-01-01 00:00:20',date('Y-m-d H:i:s'));
//현재 날짜의 차이를 계산에서 출력함
//result : 6달 전 (2010-07-24일 작성일 기준)

<?php
  
/**
* Params 
* $sDate 시작일 (게시물 작성일)
* $eDate 종료일 (현재 시간 기준)
*/
function diffDate($sDate,$eDate)
{
    $date[0]=strtotime($sDate);
    $date[1]=strtotime($eDate);
    if($date[0] >= $date[1])
    {
        return false;
    }
    $date[2]=strtotime(date('Y-m-d  H:i:s',$date[1] - $date[0]));
  
    $Y=date('Y',$date[2])-1970;
    $m=date('n',$date[2])-1;
    $d=date('j',$date[2])-1;
    $H=intval(date('H',$date[2]))-9; //그리니치 표준시 우리나라일경우 -9
    $i=intval(date('i',$date[2]));
    $s=intval(date('s',$date[2]));
    if($Y)
    {
        $returnDate= $Y;
        $returnDate.= '년 전';
    }
    elseif($m)
    {
        $returnDate= $m;
        $returnDate.= '달 전';
    }
    elseif($d)
    {
        $returnDate= $d;
        $returnDate.= '일 전';
    }
    elseif($H)
    {
        $returnDate= $H;
        $returnDate.= '시간 전';
    }
    elseif($i)
    {
        $returnDate= $i;
        $returnDate.= '분 전';
    }
    else
    {
        $returnDate= $s;
        $returnDate.= '초 전';
    }
    return $returnDate;
}
  
?>
2010/11/06 00:58 2010/11/06 00:58
예로 도메인이 http://www.naver.com 

                    http://se.naver.com

이라면 아래처럼 빨간색 부분만 처리하면 된다.




//ini_set("session.use_trans_sid", 0);
//ini_set("session.cache_expire", 86400);
//ini_set("session.gc_maxlifetime", 86400);
//ini_set('session.save_path', "/session");

session_set_cookie_params(0, "/", ".naver.com");
ini_set("session.cookie_domain", ".naver.com");

/*
if(isset($SESSION_CACHE_LIMITER)){  
    @session_cache_limiter($SESSION_CACHE_LIMITER);
}else {
    @session_cache_limiter("no-cache, must-revalidate");
}
*/  
session_start();

주의할 점은 session_start() 부분을 ini_set 아래에 사용해야 하며

사용해야 할 페이지로는 session_start() 부분이 들어간 페이지의 첫번째 페이지가 된다.

보통 index 페이지에서 사용하면 되긴 하는데 관리자페이지 등 session 체크하는 로직을 넣은 경우

session 체크하는 로직이 있는 페이지 상단에 넣어두면 사용자가 어느 url로 첫페이지를 열더라도

세션공유가 된다.
2010/11/06 00:56 2010/11/06 00:56
<?
//리눅스에서 리스트 출력 저장 -> aa.txt
//sample
dnature03_member_1218850633.thumb  이런 형태를 member_1218850633.jpg 로 일괄 변환 방법

//폴더에는 약 12135개 파일이 존재함

$row =0;
$fp = fopen ("./aa.txt","r");

for($i=1;$i<12126;$i++){
    $data = fgetcsv ($fp, 5000, ",");

    $num = count ($data);

    $tr1 = explode("_",$data[0]); // 각 _
배열 구분자로 나눔

    if($tr1[1] == "member"){    // member 있는것만 체크

        $tr2 = $tr1[1]."_".$tr1[2];  //첫전째 접두어 떼어냄
        $tr3 =
explode(".",$tr2);    //. 구분자로 다시 나움
        $tr4 =
$tr3[0].".jpg";        // 접미어 변환 -- jpg 로
    //        if($i == 1) echo
$tr4;  exit;  //테스트 출력해봄

        rename($data[0], $tr4);
           
        $row++;


    }

    if($i == 12125) echo "$row 개가
변환되었습니다.";
}

?>
2010/10/01 01:25 2010/10/01 01:25
간단하게 PHP의 date문을 사용하면 요일마다 다른 CSS를 제어할 수 있습니다.
<?
$hour=date('G');
$day=date('w');
?>
date('G')는 현재 시간을 0~24로 나타나게 해주며
w는 요일을 일요일을 0으로 출력합니다.
(토요일은 6이 되겠죠. 0~6까지 출력)

.day1 {width:40px;}
.day2 {width:100px;}
라고 CSS를 간단하게 정의해보겠습니다.

<div id="layout" class="day<?=$day?>">
가장 바깥부분에 정의하면 됩니다. id인 layout에는 공통 CSS만 집어넣어주면 됩니다.
변수 day를 출력하면 월요일의 경우 1이라고 출력되므로 class명은 day1이 됩니다.
이렇게 사용하면 요일마다 다른 class를 출력할 수 있게 됩니다.
(매일 바꿀 수도 있겠지만, 이건 좀 아니겠죠..)

요일, 시간에 따라 다른 CSS를 제어하는 문구의 예시입니다.
오후 5시~아침 7시까지는 night라는 class를 출력합니다.

<div id="layout" class="day<?=$day?>"><?if($hour>=17||$hour<=7 echo("&nbsp;night");?>
2010/08/18 21:12 2010/08/18 21:12
<?
      if($_SERVER[REQUEST_METHOD]!='POST') {
?>
 <script>
       alert("잘못된 접근방식입니다.");
       history.back();
 </script>
<?}?>
2010/08/18 21:11 2010/08/18 21:11
 

AjaxPlorer 2.55 한글 업로드 및 다운로드 가능토록 수정

Ajaxplorer

1. /server/conf/conf.php

$default_language="en"      =>> $default_language="ko" 로변경


2. server/classes/class.SystemTextEncoding.php


function getEncoding(){

...

}


함수 내에 setlocale(LC_CTYPE, 'ko_KR.eucKR'); 추가

ex)

function getEncoding(){
        global $_SESSION;
        // Check if the session get an assigned charset encoding (it's the case for remote SSH for example)
        if (isset($_SESSION["AJXP_CHARSET"]) && strlen($_SESSION["AJXP_CHARSET"])) return $_SESSION["AJXP_CHARSET"];
        // Get the current locale (expecting the filesystem is in the same locale, as the standard says)
        setlocale(LC_CTYPE, 'ko_KR.eucKR');
        return SystemTextEncoding::parseCharset(setlocale(LC_CTYPE, 0));
 }


setlocale에 대한 자세한 사항은 아래 php.net 참조


http://kr.php.net/manual/kr/function.setlocale.php


위 수정만으로 한글 파일 업로드 및 다운로드 가능합니다.

2010/08/18 21:11 2010/08/18 21:11
head.sub.php 의

$gmnow = gmdate("D, d M Y H:i:s") . " GMT";
header("Expires: 0"); // rfc2616 - Section 14.21
header("Last-Modified: " . $gmnow);
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: pre-check=0, post-check=0, max-age=0"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0



header("Cache-Control: no-cache"); // HTTP/1.1
header("Expires: 0"); // rfc2616 - Section 14.21
header("Pragma: no-cache"); // HTTP/1.0

와 같이 수정해 보시기 바랍니다.
2010/06/07 14:42 2010/06/07 14:42
1. 먼저 메타테그를 이용한 방법입니다.
<?
echo "<meta http-equiv='refresh' content='0; url=http://도메인'>"
;
?>

2. 자바스크립트를 이용한 방법
<?
echo
"<script>
document.location.href='도메인';
</script>"
;
?>
또는
<?
echo "<script>

window.location.replace('도메인');

</script>";
?>

3. 헤더를 이용한 방법

<?
header
("Location: 도메인"
);
?>

2010/03/30 02:33 2010/03/30 02:33

도메인포워딩하는것이 아니라 여러개의 도메인을 보유하고 있을시 사용할방법입니다.

===============================================================================

만약 두개의 도메인(www.youngsam.krwww.ipadschool.kr)이 있다면...

일단 두개의 도메인에서 열려야할 다른 내용의 메인페이지가 있어야겠죠
임의로 이름을 붙여서 1.php와 2.php로 하겠습니다.

그리고 index.php 파일의 내용을 이렇게 작성하면 됩니다

<?
if ($_SERVER[HTTP_HOST]=="www.youngsam.kr") {   
  index="1.php";
} elseif ($_SERVER[HTTP_HOST]=="youngsam.kr") {
  $index="1.php";
} elseif ($_SERVER[HTTP_HOST]=="www.ipadschool.kr") {
  $index="2.php";
} elseif ($_SERVER[HTTP_HOST]=="ipadschool.kr") {
  $index="2.php";
}

include $index;
?>

2010/03/30 01:35 2010/03/30 01:35
<?php

//header('Content-Type: application/x-tar');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=asdf.tar.bz2');

passthru('tar cjf - yourfiles');
exit; // 중요
2010/03/12 16:34 2010/03/12 16:34

자바스크립트에서 escape 함수를 통해 데이터를 받을 경우 '%uC548%uB155%uD558%uC138%uC694' 형태의 문자열로 인코딩되어서 오게 됩니다.
PHP 에서는 unescape 함수가 없기 때문에 직접 만들어 주어 사용할 수 있습니다.
아래 코드를 참고 하세요


function tostring($text) {
return iconv('UTF-16LE', 'UTF-8', chr(hexdec(substr($text[1], 2, 2))).chr(hexdec(substr($text[1], 0, 2)))); // UTF-8 인 경우
// return iconv('UTF-16LE', 'UHC', chr(hexdec(substr($text[1], 2, 2))).chr(hexdec(substr($text[1], 0, 2)))); // EUC-KR 인 경우
}
function unescape($text){
return rawurldecode(preg_replace_callback('/%u([[:alnum:]]{4})/', 'tostring', $text));
}


처리할 문서가 charset euc-kr 일경우 함수 tostring 에서 iconv 2번째인자를 "UHC" 로
utf8 일경우 "UTF-8"로 지정한다.

예)

$escapeString = "%uC548%uB155%uD558%uC138%uC694"; // "안녕하세요"를 escape 한 문자열
$unEscapeString = unescape($escapeString);
echo $unEscapeString;

// 출력결과
// 안녕하세요

2010/02/11 20:34 2010/02/11 20:34

PHP XML 파서

프로그래밍/PHP 2009/09/30 21:31
php5에서는 xml lib를 제공하지만 4.x는 제공하지 않는걸로 알고있습니다.
결국 xml파서를 만들어 사용해야는데요.
고맙게도criticaldevelopment.net 에서 GNU라이센스를 사용하여 배포하고있습니다.

참고문서 : http://www.criticaldevelopment.net/xml/doc.php

파일다운

1. 속성
tagData : 태그값
tagAttrs : 태그 속성값
tagParents : This member contains the number of parents this object has before the document root. This number, currently, is only used to determine how many tabs are required to nicely format the XML output.
tagChildren : This member is an array of references to all of the direct child tags of the given object, in order of occurance in the XML document. It is simply an alternative to accessing the children tags by their names, and is used when names are arbitrary or unknown.
tagName : This member contains the name of the current tag. Again, it is only used internally for the proper output of the XML document.

2. 예제 xml

<?xml version='1.0' encoding='utf-8'?>
<Widget>
<WidgetPrefs>
<title>제목</title>
  <directory_title>디렉토리제목</directory_title>
 </WidgetPrefs>
 <Content src="index.html"></Content>
</Widget>

3.사용법

<?php
//기본적으로 들어가는 부분
include "parser_php4.php";                       // 클래스 파일 include
$xml = file_get_contents("./ex.xml");         // 파싱할 대상XML 가져오기
$parser = new XMLParser($xml);             // 객체생성 parser라는 객체를 생성함
$parser->Parse();                                  // Parse()메소를 호출하여 xml을 dom 방식으로 파싱함

//파싱된 xml결과값을 사용하는 방법
echo $parser->document->widgetprefs[0]->title[0]->tagData;
 // 타이틀 데이터를 가져올때 (하나의 데이터를 지정해서 가져올 경우)
// "위젯 제목을 제공하는~~" 출력됨
echo $parser->document->content[0]->tagAttrs['src'];
 // 속성값 가져오기
 // "index.html"이 출력됨 
echo $parser->GenerateXML();              
// 위 ex.xml과 똑같은 xml 문서가 출력됨
?>

2009/09/30 21:31 2009/09/30 21:31

PHP RSS 리더

프로그래밍/PHP 2009/09/30 21:30
PHP로 구현된 간단한 RSS리더 입니다.
lastRSS라는 사이트에서 GNU 라이센스로 배포하고 있습니다. (망했나보네요.. 사이트가 closed..)
사용법은 제가 나름 사용해봤본 소스입니다.

다운로드

1. 사용법
<?php
include "./lastRSS.php";
// -------------------------------------------------------------------
// 출력할 라인수를 결정합니다.
$line = 50;
// -------------------------------------------------------------------
// 설정 URL을 지정합니다.
$rssurl = "";
// -------------------------------------------------------------------
// rss설정
$rss = new lastRSS;
$rss->cache_dir = './cache/';   //케쉬를만들 폴더설정
$rss->cache_time = 0;     //케쉬생성주기
$rss->cp = 'UTF-8';      //인코딩
$rss->date_format = 'y-m-d';   //날짜형식 년월일
   
if ($rs = $rss->get($rssurl)) {
  $i=0;
  foreach($rs['items'] as $item) {
// -------------------------------------------------------------------
// 인코딩및 cdta 태그를 지우는 부분입니다.
   $item[link]=str_replace("<![CDATA[", "",$item[link]);
   $item[link]=str_replace("]]>", "",$item[link]);
   $item[link]=iconv('UTF-8', 'EUC-KR', $item[link]);
   $item[title]=str_replace("<![CDATA[", "",$item[title]);
   $item[title]=str_replace("]]>", "",$item[title]);
   $item[title]=iconv('UTF-8', 'EUC-KR', $item[title]);
   $item[description]=str_replace("<![CDATA[", "",$item[description]);
   $item[description]=str_replace("]]>", "",$item[description]);
   $item[description]=iconv('UTF-8', 'EUC-KR', $item[description]);
   $item[author]=iconv('UTF-8', 'EUC-KR', $item[author]);
   $item[category]=iconv('UTF-8', 'EUC-KR', $item[category]);
// -------------------------------------------------------------------
// 출력 HTML 부분
   ?>
    제목 :  <?=$item['title']?>   <br/>
    링크 :  <?=$item[link]?>   <br/>
    내용 :  <?=$item[description]?>  <br/>
    작성자 : <?=$item[author]?>   <br/>
    작성일 : <?=$item[pubDate]?>   <br/>
    <br/><br/>
   <?
// -------------------------------------------------------------------
// 라인수결정
   if($i++ > $line-2) break;
  }
}
// -------------------------------------------------------------------
// RSS경로가 잘못되거나 열수 없을때
else {?>
경로를 찾을수 없거나, 서버를 찾을수 없습니다.
<?
}
?>
2009/09/30 21:30 2009/09/30 21:30
Sphinx를 사용하여 콘텐트를 색인하고, 텍스트를 빠르게 찾으며, 유용한 검색 결과 만들기


http://www.sphinxsearch.com/


무료의 오픈 소스 검색 엔진으로서 텍스트를 매우 빠르게 검색하도록 설계되었다.

예를 들어, 다섯 개의 인덱스 컬럼과 약 30만 개의 행을 가진 활성 데이터베이스에서, 각 컬럼은 15 단어를 포함하고 있다면, Sphinx는 "any of these words" 검색 결과를 100분의 1초 안에 찾아낸다.
(2-GHz AMD Opteron 프로세서, 1 GB RAM, Debian Linux® Sarge).

C++로 작성되어 있고, Windows 기반도 지원 한다고 합니다.
요즘 검색엔진 프로젝트가 꾀 많군요..

자세한 내용은 다음 링크의 문서를 참고 해보세요..^^;;

http://www.ibm.com/developerworks/kr/library/
os-php-sphinxsearch/index.html

2009/08/25 14:14 2009/08/25 14:14


zend로 인코딩(?)되어 있는 프로그램을 소스로 바꿔주는 프로그램입니다.

저는 해봤는데 잘 됩니다

남의 창작물을 도둑질하는 용도로만 사용 안되길 바랄 뿐입니다.

실행방법은

c:\some path>php.exe aa.php

(여기서 aa.php는 인코딩된 php파일이다.)

결과는 aa.de.php 로 파일이 생성된다.

다들 알겠지만 윈도우를 사용한다면 귀찮게 명령어를 쓸게 아니라

탐색기에서 해당파일 또는 링크로 해당파일을 프로그램에 떨어뜨리면

arg로 처리되므로 원래 위치에

filename.de.php

로 파일이 생성됨을 확인할 수 있다.


2009/05/27 11:00 2009/05/27 11:00