천객만래 [千客萬來] (It has an interminable succession of visitors)

블로그 PAZ 백트래킹 및 홈페이지 예제



/***************************************************
        만든이: 윤여혁(paz)
        Homepages: http://www.zeroblog.com/
        Email: goodemail@korea.com
****************************************************/


내려받으신 압축 파일에는 블로그 타입의 스킨과 
그 스킨과 어울릴만한 캘린더, 최근 코멘트, RSS 변환 파일을 포함하고 있습니다. 
사용의 실례를 보여드리고자 제 홈의 head.html, foot.html도 함께 포함시켰습니다. 

압축을 풀면 나타나는 폴더와 파일들은 실제 제 홈에서 사용되는 파일들의 위치입니다. 
참고로 제 홈은 노프레임이므로 head.html과 foot.html 그리고 그 사이에 포함되는 블로그 타입의 스킨(paz_blog_100)으로 구성되어 있습니다. 

캘린더나 최근 코멘트 그리고 RSS는 모두 사용하실 필요는 없으며 필요한 것만 include하여 사용하면 됩니다. 



## 파일 구성:
public_html/index.html                : 원래는 대문역할을 하는 것이지만 포워딩 메타 태그를 기입하여 바로 블로그 페이지가 열리도록 했습니다.
public_html/head.html                : head.html 입니다. 
public_html/foot.html                : foot.html이며 메뉴를 담당하고 있습니다. 캘린더와 최신 코멘트를 include하는 예문을 볼 수 있습니다. 
public_html/bbs/style.css                : head.html, foot.html의 style sheet

public_html/bbs/skin/paz_blog_100        : blog type의 스킨

public_html/bbs/paz_comment.php        : 최신 코멘트. 최신 코멘트를 사용하려면 이 파일을 include하면 됩니다. 
public_html/bbs/paz_calendar.css        : 캘린더 style shteet
public_html/bbs/paz_calendar.php        : 캘린더. 캘린더를 사용하려면 이 파일을 include하면 됩니다. 
public_html/bbs/paz_trackback.php        : 최근 트랙백
public_html/bbs/zero2rss.php        : RSS 변환



## 캘린더 사용 
위치: 캘린더 소스는 paz_calendar.php와 paz_calendar.css 이며 bbs 폴더에 있습니다. 
기능: 작성된 글이 있는 날을 표시하며 그 날짜에 마우스를 가져가면 작성된 글의 수를 표시합니다. 그리고 날짜를 클릭하면 해당 일의 글을 보여줍니다. 
참고로 방명록 형식의 글은 바로 본문을 보여주고 일반 게시판 형식은 목록을 보여줍니다. 

설치:
1. paz_calendar.php, paz_calendar.css를 달력을 나타내고자 하는 페이지의 파일과 동일한 폴더에 둠(아래 부연 설명 참조)
2. 캘린더가 표시되길 원하는 곳에 include 문장을 입력 
3. 제로보드 폴더(대개 bbs)에 _head.php를 수정
4. paz_calendar.php 수정
5. paz_calendar.css 수정

1번 부연 설명: 
캘린더를 제로보드 게시판에서 사용한다면 제로보드(대개 bbs이며 lib.php가 존재하는 폴더임) 폴더에 둡니다. 
예를 들면 노프레임에서 head.html과 foot.html은 게시판에 포함되는 것이므로 이들 파일에서 캘린더가 나타나길 원한다면 제로보드 폴더에 둡니다.
저의 경우는 foot.html에 캘린더가 나타나도록 했으므로 제로보드 폴더에 두었습니다. 
하지만 index.html 또는 main.html 같이 게시판이 아닌 경우는 이들과 같은 폴더에 둡니다. 

사용 예)
1. 제로보드 폴더에 paz_calendar.php와 paz_calendar.css를 둠
2. foot.html 을 메모장으로 열고 아래 include 문장을 캘린더가 나타나길 원하는 곳에 삽입

<? include "./paz_calendar.php"; ?>

참고: 인클루드문에서 paz_calendar.php의 경로는 자신의 홈 상황에 맞게 수정하십시요. 위 인클루드 문은 예제일 뿐입니다. 
<? include "/home/finegood/public_html/bbs/paz_calendar.php; ?> 이렇게 할 수도 있겠죠.

3. 제로보드 폴더(대개 bbs)에 _head.php를 열고 아래 코드라인을 찾으세요..대게 161라인에 있습니다. 

// 전체개수를 구함 : 검색어가 있을때는 따로 전체 갯수를 구함, 아니면 게시판에 있는것으로 
if($s_que) {

그리고 아래 코드라인을 그 위에 삽입하세요.. 대개 160 라인정도가 되겠군요..

결국 이렇게 됩니다. 

           // 선택된 날짜로 이동할 때 사용되는 조건문 - 캘린더에서 사용
            if ($go_date) { 
                    $s_que    = " where from_unixtime(reg_date,'%Y%m%d') = $go_date and father = 0"; 
            } 

        // 전체개수를 구함 : 검색어가 있을때는 따로 전체 갯수를 구함, 아니면 게시판에 있는것으로 
        if($s_que) {
        ...

4. paz_calendar.php를 메모장으로 열고 $_zb_url, $id 등을 주석을 참조하여 자신의 홈페이지 조건에 맞도록 수정

5. 자신의 홈 성격에 맞도록 paz_calendar.css를 수정하여 캘린더 색 변경 




## 최근 코멘트 보기 사용
위치: 최근 코멘트 보기 소스는 paz_comment.php이며 bbs 폴더에 있습니다. 
기능: 최근에 기록된 코멘트를 나타내며 마우스를 가져가면 작성자명과 작성 시간이 표시됩니다. 클릭하면 해당 본문으로 이동합니다. 

설치: 위 캘린더와 유사합니다. 
1. paz_comment.php를  최근 코멘트를 나타내고자 하는 페이지의 파일과 동일한 폴더에 둠(위 캘린더의 부연 설명 참조)
2. 최근 코멘트가 표시되길 원하는 곳에 paz_comment.php를 include 하는 문장을 삽입함. <? include "./paz_comment.php"; ?>
3. paz_comment.php을 메모장으로 열고 수정( $board_title는 반드시 자신의 게시판명으로 변경하시기 바랍니다)
4. _head.php 을 수정

위 캘린더처럼 _head.php에 아래 코드를 삽입하면 됩니다. 

            // 선택된 게시물로 이동할 때 사용되는 조건문 - 최근 코멘트에서 사용
            if ($go_no) { 
            $s_que    = " where no = $go_no" ; 
            } 

저의 경우는 위 2개 코드 모두(캘린더용, 최근코멘트용)가 _head.php에 삽입되어 있습니다. 

저의 _head.php 예)

        // 선택된 날짜에 대한 이동시 사용되는 조건문 
        if ($go_date) { 
                $s_que    = " where from_unixtime(reg_date,'%Y%m%d') = $go_date and father =0"; 
        } 

        // 선택된 게시물에 대한 이동시 사용되는 조건문 
        if ($go_no) { 
                $s_que    = " where no = $go_no" ; 
        } 

        // 전체개수를 구함 : 검색어가 있을때는 따로 전체 갯수를 구함, 아니면 게시판에 있는것으로
        if($s_que) {
        // 카테고리만 있을 경우
        ...



참고: 캘린더, 최근코멘트가 DB 접속을 못해서 나타나는 에러를 보인다면 아래 두 라인(DB접속하는 부분)에 주석처리(//)를 해제하시면 됩니다. 
대개 노프레임에 헤더나 푸터에 사용되는 경우는 따로 DB 접속을 할 필요가 없으므로 주석처리된 채로 두면 됩니다. 

//        if(!$connect) $connect=paz_comm_dbconn();
//        mysql_close($connect);



## 카테고리 사용
1. 게시판 설정에서 '카테고리 사용'에 체크
2. paz_category.php를 메모장으로 열고 카테고리를 적용할 게시판 이름을 적습니다.
3. 사용하고 싶은 곳에 아래처럼 인클루드 하면 됩니다. 
<? include "./paz_category.php"; ?>



## 최근 트랙백 사용
최근 코멘트와 설치 방법이 유사합니다. 
<? include "./paz_trackback.php"; ?>



## RSS 변환기
위치: RSS 변환기 소스는 zero2rss.php이며 bbs 폴더에 있습니다. 
기능: 블로그 게시판의 작성된 글을 RSS로 변환

참고: 
RSS(Really Simple Syndication)란 웹에 올린 글이나 뉴스 등을 다른 사람과 공유하기 위해 사용되는 표준 XML 형식을 말합니다. 
따라서 게시판에 작성된 글을 공통된 표준 양식인 RSS로 전환해 두면 RSS를 수집하는 사이트(www.blogkoorea.org)나 프로그램(SharpReader)에 의해 작성된 글이 읽혀지게 되는 겁니다. 

예를 들면 블로그 게시판에 글을 작성하면 글의 제목이 제가 가입한 blogkorea 리스트 페이지에 몇분 내에 나타납니다. 
관심있는 사람들이 그 제목을 클릭하면 제 홈으로 연결되므로 글을 알릴 수가 있게 되는 셈입니다.  

참고로 blogkorea에 가입 할 때 등록 정보에 '블로그 RSS 주소'란에 자신의 RSS 주소를 기입하면 됩니다. 
저의 경우는 http://finegood.posville.co.kr/bbs/zero2rss.php?id=fine_diary 기입했습니다. 


설치 방법은 아래 제작자 양주일님의 글을 참고하세요..

http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=rss&select_arrange=headnum&desc=asc&no=4936


저는 zero2rss.php를 메모장으로 열고 $url, $allowBoard 이 두 부분만 수정해서 사용하고 있습니다. 




## 블로그 타입의 스킨 사용

아래 링크된 페이지를 참조하세요..

http://www.nzeo.com/bbs/zboard.php?id=cgi_zskins2&page=1&sn1=&divpage=2&sn=on&ss=on&sc=off&keyword=paz&select_arrange=headnum&desc=asc&no=12734

별다른 설정이나 수정없이 다른 스킨처럼 압축 풀어서 사용하시면 됩니다.
포스트(글 박스)의 가로 폭과 한 페이지에 보여지는 포스트의 갯수(페이지당 목록 수)는 게시판 설정에서 합니다. 

1. 이미지 파일을 업로드 하고 원하는 곳에 이미지를 위치 시키기 위해서는 게시판 설정에서 자료실 기능을 체크해야 합니다. 

글쓰기에서 이미지 파일(jpg, gif, png)을 업로드하면 상단 중앙에 이미지가 나타납니다. 
특정 위치에 이미지가 나타나기를 원한다면 그곳에 <image1>를 입력하시면 됩니다. 
글과 어울리게 정렬을 하려면 <image1 align=?> 를 입력 하시되 물음표 대신에 이미지 정렬 방식(right 또는 left)을 적으시면 됩니다. 

예) 
IMAGE UP 1을 통해 파일을 올리시고 이미지를 글 왼쪽에 위치 시키고 싶으시면 <image1 align=left> 라고 적으면 됩니다. 
IMAGE UP 2를 통해 파일을 올리시고 오른쪽 정렬을 원한다면 <image2 align=right> 를 입력하시면 됩니다.
이미지만 업로드하면 중앙정렬로 이미지가 나타납니다. 

참고: 관리자가 아닌 사용자는 권한설정에서 HTML 사용권한이 부여되어야 합니다.

2. 보여지는 부분은 스타일시트에 자세한 주석을 보고 수정할 수 있도록 하였습니다.  

예) 포스트(글박스) 제목의 색을 변경하고 싶으시면 style.css를 메모장으로 열어서 
아래처럼 포스트 제목이라는 주석을 찾아 color 부분을 변경하면 됩니다. 

/* 포스트 제목 */
.post_title {font-size:9pt; font-family:굴림,돋움; color:#666666; font-weight:bold; TEXT-decoration: none}


paz_home_트랙백.zip


Posted by SB패밀리

GD를 이용한 통계 그래프


20050227_gd.zip 압축을 풀어서 index.html를 실행하면 됩니다.
필요한 이미지와 폰트파일도 함께있습니다.
폰트파일을 못찾는 에러가 나는 경우 폰트파일의 위치를 절대경로로 수정해 주세요.
버전은 PHP5, GD2.0.28 입니다. GD버전이 낮은 경우 이미지가 선명하게 나오지 않더군요.

세로 막대 그래프
<?php
//클레스 파일
include "graph_class.php";//기본클레스
include "drawColumn.php";//막대그래프클레스

//입력되는 데이터로 디비에서 불러와 처리해도 된다.
$arr_data=array(60,82,103,34,75,126,137,68,119,170,91,52,24,79,99);

//새로운 클래스를 만들어 호출 (막대그래프)
$mydrawColumn=new drawColumn;
$mydrawColumn->data = $arr_data;
$mydrawColumn->runDraw();
?>

가로 라인 그래프
<?php
//클레스 파일
include "graph_class.php";//기본클레스
include "drawLinegraph.php";//꺽은선그래프클레스

//입력되는 데이터로 디비에서 불러와 처리해도 된다.
$arr_data=array(60,82,103,34,75,126,137,68,119,170,91,52,24,79,99);

//새로운 클래스를 만들어 호출 (꺽은선그래프)
$mydrawLinegraph=new drawLinegraph;
$mydrawLinegraph->data = $arr_data;
$mydrawLinegraph->typebg = 2;//배경을 점선으로 한다.
$mydrawLinegraph->runDraw();
?>


세로 막대 그래프
<?php
//클레스 파일
include "graph_class.php";
include "drawColumn.php";

//입력되는 데이터로 디비에서 불러와 처리해도 된다.
$arr_data=array(60,82,103,34,75,126,137,68,119,170,91,52,24,79,99);

//새로운 클래스를 만들어 호출 (막대그래프)
$mydrawColumn=new drawColumn;
$mydrawColumn->data = $arr_data;
$mydrawColumn->typesize = 2;//이미지크기를 중간사이즈로 설정
$mydrawColumn->runDraw();
?>



20050227_gd.zip




Posted by SB패밀리

웹서버 설정 관련 링크 : 웹서버 + PHP + MySQL + DDNS.



아래 사이트에서정보와 자료를 구하면 됨.


윈도우 기반 또는 리눅스 기반...



www.codns.com
www.apmsetup.com
www.autoset.org
www.dyndns.com




Posted by SB패밀리

제로보드,PHP 스팸자동등록방지 기능




ZM_Crypt 2.0 특징


 

적용이 쉽다

PHP 프로그램을 몰라도, HTML만 알면 쉽게 적용 가능합니다.
기본적으로 파일 4개에 1줄씩만 넣어주시면 작동합니다. 

게시물 차단 + 덧글(코멘트) 차단

최근에는 덧글스팸도 많이 늘었습니다.
본 프로그램은 게시물 뿐만 아니라 덧글(코멘트)의 자동등록도 차단합니다. 

 

디자인 변경 용이

여러 스킨을 사용해도, 각 스킨마다 원하는 위치에
예쁘게 삽입 가능합니다. 

 

보안코드가 텍스트 아닌 이미지

보안코드가 텍스트가 아닌 이미지로 출력됩니다.
그렇다고, 기존 이미지 파일을 불러오는 것이 아닙니다.
GD 라이브러리를 이용, 자체 폰트함수로 그때마다 숫자 이미지 파일을 뿌려주고
자동 삭제됩니다.
때문에, 기존 텍스트 기반의 보안코드보다 보안성이 강합니다. 
씨앗(Seed)을 바탕으로 한 자체 암호화 함수 내장여러분이 처음에 씨앗(Seed)을 설정할 수 있습니다.
암호화는 그 씨앗을 바탕으로 이루어집니다.
때문에, 더욱 더 안전합니다. 

 

설치방법 

 

환경설정 (zm_crypt.php 수정)

① 13째줄(씨앗) : 반드시 변경, 알파벳+숫자로 이루어진 암호 (외울 필요 없음)
② 14째줄(자릿수) : 보안코드의 자릿수 설정 (기본값:4자리) 
③ 15째줄(보안코드 문자종류) : 숫자+알파벳, 또는 숫자만 설정 가능 (기본값:숫자+알파벳)
④ 스팸광고게시물 차단 필요없는 게시판 id 입력 : 게시판에 따라 차단 필요없는 게시판 이름(id)를 콤마(,)로 구분하여 입력 

업로드제로보드(bbs) 디렉토리 안에 'skin' 디렉토리에 아래 두 파일 업로드.
① zm_crypt.php (zmCrypt 프로그램 파일)
② andale12.gdf (글꼴 파일)
예:
/bbs/ : 제로보드 설치 디렉토리
/bbs/skin/ (특정 스킨 디렉토리가 아님) ☜ 이 디렉토리에 설치
/bbs/skin/snowboard/ : 스노우보드 스킨 디렉토리 

제로보드 파일 수정 (write_ok.php , comment_ok.php)위 두 파일을 열면 5~7째줄에 아래와 같은 코드가 똑같이 들어 있습니다.
include "_head.php";
위 코드의 바로 아랫줄에 아래 코드를 삽입합니다.
include ("./skin/zm_crypt.php" ) ;
저장 후 업로드 하여 덮어씌우시면 됩니다. 

스킨 파일 수정 #1 (write.php)① <?=$hide_start?> 코드 아랫줄에 다음 코드 삽입
<? $zCryptClass='input' ; include ("./skin/zm_crypt.php" ) ; ?>
(위에서 input 는 입력 폼의 스타일 클래스(class)입니다. 이해 안 되시면 패쓰!)

이후, 원하시는 위치에 아래와 같이 넣으시면 됩니다.
<?=$zCrypt_Img?> : 보안코드 이미지
<?=$zCrypt_Form?> : 보안코드 입력폼
(<?=$hide_start?> ~ <?=$hide_start?> 안에 넣어야 로그인한 회원에게는 숨길 수 있습니다.) 
스킨 파일 수정 #2 (view_write_comment.php)① <?=$hide_c_password_start?> 코드 아랫줄에 다음 코드 삽입
<? $zCryptClass='input' ; include ("./skin/zm_crypt.php" ) ; ?>
(위에서 input 는 입력 폼의 스타일 클래스(class)입니다. 이해 안 되시면 패쓰!)

이후, 원하시는 위치에 아래와 같이 넣으시면 됩니다.
<?=$zCrypt_Img?> : 보안코드 이미지
<?=$zCrypt_Form?> : 보안코드 입력폼
(<?=$hide_c_password_start?> ~ <?=$hide_c_password_end?> 안에 넣어야 로그인한 회원에게는 숨길 수 있습니다.) 
설치 완료설치완료되었습니다. 테스트해 보시기 바랍니다.
로그아웃 후 테스트해 보시는 것, 잊지 마세요. 

 

고급 환경설정 

환경설정 (zm_crypt.php 수정)20~17줄에는 고급 환경설정 코드가 있습니다.

보안코드 글자색, 바탕색 등을 변경할 수 있습니다.
주석이 자세히 되어 있으므로 쉽게 변경 가능합니다. 

 

기타 문의사항 및 정보 

이메일 : ZnMee@naver.com (지앤미) 
블로그 : blog.naver.com/ZnMee (知&美 : 앎과 앎다움) 
프로그램 : ZM_Crypt 2.0 (2007.07.18. Released)


※ 2007년 11월 07일 추가 정보

제가 테스트하고 있는 커뮤니티 게시판에 본 ZM_Crypt 2.0을 적용한 이후로
자동 스팸광고 게시물이 어제 처음으로 등록되었습니다.
어떻게 등록했나 보니, 아예 회원가입을 자동으로 하여 로그인 한 후
게시물을 등록하는 방식이더군요.
이에, 회원가입 페이지에도 보안코드를 입력하도록 조치하였습니다.

제로보드 프로그램이 있는 디렉토리에 있는
member_join.php 에 보안코드 입력 폼을,
member_join_ok.php 에 검사 코드를 추가하면 됩니다.

단, 이렇게 했을 경우, 오류가 발생합니다.
zm_crypt.php 파일을 열어 18번째 줄 다음에
if (!$id) {$id=0;}
위와 같이 1줄의 코드를 넣어 주시면 오류가 해결됩니다.

 

※ 2007년 12월 17일 추가 정보

사용하시는 서버에 ZM_CRYPT를 사용 가능한지 체크하는 프로그램을
첨부파일로 올렸습니다.
파일명 : zm_crypt_check-znmee.php
위 파일을 먼저 서버에 올리셔서 테스트를 하신 후
적용하시기 바랍니다.


 

※ 2008년 01월 06일 추가 정보

"씨앗"을 반드시 변경하셔야 합니다.
"씨앗"은 입력되는 보안코드를 암호화하는 기본 바탕이 됩니다.
본 프로그램은 단순히 "5858"이라고 입력해도 "5858"로 전송되지 않고
자체 암호화를 통해 다른 문자열로 전송됩니다.
이 암호화를 할 때, "씨앗"을 이용합니다.

예를 들어,
A 사이트 게시판에서 "5858"을 입력했을 때의 암호화 코드와
B 사이트 게시판에서 "5858"을 입력했을 때의 암호화 코드가 똑같다면
금방 뚫리게 되어 스팸 게시물은 다시 올라오게 됩니다.
(이미 기본값인 ZnMeeSeed는 뚫렸습니다.)

"씨앗"은 각 사이트의 게시판마다 제각기 다른 암호화를 할 수 있도록 만드는
기본 바탕입니다.
아직 변경하지 않고 사용하시는 분들은 꼭 바꿔 주시기 바랍니다.
외울 필요도 없습니다.
영문과 숫자의 조합으로 되도록 의미없는 글자들의 조합으로 바꿔 주세요.



zm_crypt_2[1].0_znmee.zip


Posted by SB패밀리

제로보드 스킨을 이용한 게시물 메일보내기




mailthis.zip



예제를 보세요.

http://wegoart.com/html/zboard.php?id=brick&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=23

설명서와 파일은 다운로드 받으세요.

다음은 설명서의 앞부분입니다.
mailthis(이 게시물 멜로 보내기) 설치 설명서입니다.

--------------------------------------------------------------------------------
저작권은 주장하지 않습니다.
마음대로 수정하세요.

만든날 : 2003.2.18
만든이 : 이동호(leedoho@hanmail.net)
질문은 http://oktk.net 의 자유게시판에 하세요.

purple 스킨은 이름을 바꾸고 약간의 수정을 했지만 저작권은 바꾸지 않았습니다.
메일보내기, 맨 위로 등을 가능하게 했습니다.
--------------------------------------------------------------------------------

1. 압축을 풀면 mailthis.php, mailgo.php, 사용설명서.TXT(이 파일)
   3개의 파일과 purple 스킨 디렉토리가 들어 있습니다.
   FTP를 이용하여 파일은 서버에 lib.php 파일이 있는 부분에 올리고
   스킨은 스킨 디렉토리에 올립니다..
   
2. 우선 테스트 하기 위해 여기에 첨부된 purple 스킨을 설치합니다. 
   그리고 4번과정을 미리 마친 다음 작동하는 지를 확인해 봅니다.

3. 기존의 스킨에도 사용하게 위해서는 스킨 디렉토리에 스킨에 맞는그림 파일
   btn_mail.gif, btn_top.gif 파일을 만들어 업로드하고
   스킨파일내의  view_foot.php 파일을 수정해야 합니다.
   
  파일을 열어 버튼이 나올 부분에 다음을 삽입하세요. 
  첨부된 스킨 파일을 열어 확인해 본 후에 수정하세요.
                <a href=# onclick=window.open('mailthis.php?id=<? echo "$id"; ?>&no=<? echo "$no"; ?>','mailthis','width=400,height=350,scrollbars=auto,resizable=0,status=0,menubar=0')>
                <img src=<?=$dir?>/btn_mail.gif border=0></a>    
    <img src=<?=$dir?>/btn_top.gif border=0 onclick="javascript:window.scroll(0,0);" style="cursor:hand;">
    
       
4. lib.php 파일을 열어 아래의 소스를 copy하여 넣습니다.
   36? 째줄의 다음 부분 바로 앞에 넣으세요.
   
   //  초기 헤더를 뿌려주는 부분;;;; 

--------------------------------------------------------------------------------
copy 할 부분입니다.
// 여기 다음 부터

//  mail head 시작

        function mailhead($body="",$scriptfile="") {
                global $group, $setup, $dir,$member, $PHP_SELF, $id, $_head_executived, $HTTP_COOKIE_VARS, $width;
                if(!eregi("member_",$PHP_SELF)) $stylefile="skin/$setup[skinname]/style.css"; else $stylefile="style.css";

                // html 시작부분 출력
                if($setup[skinname]) {
                        ?>
<html> 
<head>
        <title><?=$setup[title]?></title>
        <meta http-equiv=Content-Type content=text/html; charset=EUC-KR>
        <link rel=StyleSheet HREF=<?=$stylefile?> type=text/css title=style>

</head>
<body topmargin='0'  leftmargin='0' marginwidth='0' marginheight='0' <?=$body?>>
                        
                        <div align='center'>
                        <?
                } else {

                        ?>
<html>
<head>
        <title>이 게시물 메일로 보내기</title>
        <meta http-equiv=Content-Type content=text/html; charset=EUC-KR>
        <link rel=StyleSheet HREF=style.css type=text/css title=style>

</head>
<body topmargin='0'  leftmargin='0' marginwidth='0' marginheight='0' <?=$body?>><div align='center'>
                        <?
                }

        }
//  mail head 종료

// directfoot 시작

        function directfoot() {

                global $width, $group, $setup, $_startTime , $_queryTime , $_foot_executived, $_skinTime, $_sessionStart, $_sessionEnd, $_nowConnectStart, $_nowConnectEnd, $_dbTime, $_listCheckTime, $_zbResizeCheck;



                if($setup[skinname]) {
                        ?>
        
                        <?
                        if($_zbResizeCheck) {
                        ?>
                        <!-- 이미지 리사이즈를 위해서 처리하는 부분 -->
                        <script>
                                function zb_img_check(){
                                        var zb_main_table_width = document.zb_get_table_width.width;
                                        var zb_target_resize_num = document.zb_target_resize.length;
                                        for(i=0;i<zb_target_resize_num;i++){ 
                                                if(document.zb_target_resize[i].width > zb_main_table_width) {
                                                        document.zb_target_resize[i].width = zb_main_table_width;
                                                }
                                        }
                                }
                                window.onload = zb_img_check;
                        </script>

                        <?
                        }
                        ?>
</div>
</body>
</html>
                        <?
                        
                } else {

                        ?>
                        </div>
                        </body>
                        </html>
                        <?
                }

                $_phpExcutedTime = (getmicrotime()-$_startTime)-($_sessionEnd-$_sessionStart)-($_nowConnectEnd-$_nowConnectStart)-$_dbTime-$_skinTime;
                // 실행시간 출력
                echo "\n\n<!--"; 
                if($_sessionStart&&$_sessionEnd)                  echo"\n Session Excuted  : ".sprintf("%0.4f",$_sessionEnd-$_sessionStart);
                if($_nowConnectStart&&$_nowConnectEnd)         echo"\n Connect Checked  : ".sprintf("%0.4f",$_nowConnectEnd-$_nowConnectStart);
                if($_dbTime)                                                          echo"\n Query Excuted  : ".sprintf("%0.3f",$_dbTime);
                if($_phpExcutedTime)                                          echo"\n PHP Excuted  : ".sprintf("%0.3f",$_phpExcutedTime);
                if($_listCheckTime)                                         echo"\n Check Lists : ".sprintf("%0.3f",$_listCheckTime);
                if($_skinTime)                                                         echo"\n Skins Excuted  : ".sprintf("%0.3f",$_skinTime);
                   if($_startTime)                                                 echo"\n Total Excuted Time : ".sprintf("%0.3f",getmicrotime()-$_startTime);
                echo "\n-->\n";
        }

// directfoot 종료

// 여기 앞까지

Posted by SB패밀리

[개발/PHP] web php unicode 문자열 urldecode

문자열 : %uXXXX


<?php

function decode_unicode_url($str)
{
  $res = '';

  $i = 0;
  $max = strlen($str) - 6;
  while ($i <= $max)
  {
    $character = $str[$i];
    if ($character == '%' && $str[$i + 1] == 'u')
    {
      $value = hexdec(substr($str, $i + 2, 4));
      $i += 6;

      if ($value < 0x0080) // 1 byte: 0xxxxxxx
        $character = chr($value);
      else if ($value < 0x0800) // 2 bytes: 110xxxxx 10xxxxxx
        $character =
            chr((($value & 0x07c0) >> 6) | 0xc0)
          . chr(($value & 0x3f) | 0x80);
      else // 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx
        $character =
            chr((($value & 0xf000) >> 12) | 0xe0)
          . chr((($value & 0x0fc0) >> 6) | 0x80)
          . chr(($value & 0x3f) | 0x80);
    }
    else
      $i++;

    $res .= $character;
  }

  return $res . substr($str, $i);
}
?>

Simple test with japanese characters,
combined with urldecode:

<?php

$str = decode_unicode_url('%u65E5%u672C%u8A9E');
print(mb_convert_encoding(urldecode($str), "sjis", "euc-jp, utf-8, sjis") . '<br/>');
?>

Posted by SB패밀리

MYSQL Query의 간단한 사용법


http://www.nzeo.com/bbs/zboard.php?id=p_study&page=2&sn1=&divpage=1&category=67&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=72000-03-06 03:25:23,


1. MYSQL DB
PHP에서 DB와 연동하기 위해서는 우선 DB에 접근을 해야 합니다.
DB에 접근하기 위해서는 MYSQL DB가 어데 있는지와 자신의 계정 아듸와, 패스워드, 
그리고 DB계정 아듸가 필요합니다.
보통 MYSQL DB는 자신의 계정과 같은 곳에 있기 때문에 localhost로 지정하면 되지만 따로 서버를 
만들어서 MYSQL DB를 이용하는 경우에는 해당 서버의 IP 주소가 필요합니다.
그럼 실질적으로 하겠습니다.
우선 DB에 접속하기 위한 설정을 변수로 미리 선언해 놓습니다. (이게 편합니다)

$host_name = "localhost";
$user_name = "user";
$user_password = "*****";
$db_name = "test";

즉 Mysql의 DB는 같은 계정에 있다구 하고, $user_name은 자신의 계정 아듸, $user_password는 계정 패스워드, $db_name은 자신에게 할당된 DB의 이름입니다.

그럼 이제 접속을 해야 겠죠.

$connect = mysql_connect($host_name,$user_name,$user_password) or echo"mysql_error()"; 

mysql_connect()라는 함수가 바로 DB에 접속하는 함수입니다.
mysql_connect() 함수에 $host_name, $user_name, $user_password를 주고 호출을 하게 되면 결과가 나옵니다.
이 결과값은 $connect 안에 넣게 되죠.
뒤에 or echo"mysql_error()"; 은 만약 에러가 발생하면 에러값을 출력하게 하는 구문입니다.
mysql_error()은 에러발생시 에러값을 return 해 주는 기특한 함수입니다.
만약 이상없이 DB에 접속하게 되면 아무 표시도 안나겠죠.
그럼 이제 자신의 DB에 연결해 봅시다.

mysql_select_db($db_name, $connect ) or echo"mysql_error()";

mysql_select_db()에 $db_name 과 $connect를 넣구 호출하면 자신의 DB에 연결이 됩니다.

2. Table 생성

자 그럼 이제 DB에 테이블을 생성해 봅시다.
DB에 테이블을 생성하건, 삭제하건, 아님 수정하건 Query문을 mysql에 건네주게 되어 있습니다.

이름과 나이, 전화번호, 주소만 가지고 있는 테이블을 만들어 봅시다.
$que = "CREATE TABLE Human_info (
                                      id int(11) DEFAULT '0' NOT NULL auto_increment,
                                      name varchar(10),
                                      age int(3),
                                      tel_num varchar(20),
                                      address text,
                                      PRIMARY KEY (id))";

위와 같은 Query문을 만들었습니다.
Query문을 만들 때는 문자열 변수에 내용을 입력하면 됩니다.
위에 것은 보기 좋으라고 줄을 나누었는데 이러기 싫은 한줄로 쫘악 해도 됩니다.

생성하는 Query문은 "CREAT TABLE 테이블명 ( 필드명과 Type )" 로 합니다.
즉 위에서 테이블명은 Human_Info가 되죠.
그리고 id, name, age, tel_num, address 같은 넘은 바로 스키마 이름이 되는 것이고, 그 옆에 int(11), 
varchar(10), text 같은 것은 Type이 되는거죠.
그런데 사용할 스키마와는 별도로 id 라는 스키마를 지정했죠?
ID는 테이블에 데이터를 넣고 뺄 때 필요한 일련번호입니다.
DEFAULT '0' 은 첨에는 0부터 시작한다는 거죠.
NOT_NULL 은 절대 빈칸은 허용 안되다는 거죠. 어떤 넘이라도 일련번호를 붙여야 된다는 거죠.
auto_increment 는 별다른 값을 안 주어도 자동으로 증가하라는 겁니다.
그리고 밑에 PRIMARY KEY (id)를 씀으로서 기본키는 ID라는 것을 지정하는 겁니다.

그럼 위에 쓰인 Type에 대해서 이야기 하죠.
int(11)은 11자리의 정수형 타입닙니다.
varchar(20)은 20칸짜리 문자열이라는 거구요.
text는 개행문자를 포함하는 끝을 모르는(?) 문자열이라는 겁니다.
Type은 보통 위에 3가지만 쓰면 별 이상없을 겁니다.
다른 Type들은 별로 쓰이지는 않으니 필요할때마다 찾아서 하시면 됩니다.
자 그럼 이 $que 라는 질의어를 mysql에 전달합시다.

mysql_query( $que, $connect ) or echo"mysql_error()";

mysql_query() 라는 함수가 바로 질의어를 넘겨주는 함수입니다.
물론 생성할 때뿐만 아니라 질의어를 넘겨줄 때 이 함수를 쓰는 겁니다.

이렇게 하면 자신의 DB에는 id, name, age, tel_num, address를 필드로 하는 테이블이 생성된겁니다.

3. Table에 자료 추가

자 이제, 테이블을 생성했으니 자료를 추가해봅시다.
지금은 테이블만 만들어져있기 때문에 자료가 하나도 없습니다.
자료를 Insert할 때는 필드의 순서대로 입력을 해야 합니다.
우선 Query 문을 작성해 봅시다.

$que = "INSERT INTO Humna_info VALUES (
                            '',
                            '아무개',
                            24,
                            '000-000-0000',
                            '아무시 
                            아무구 아무동'
                            )";

위의 "INSERT INTO 테이블명 VALUES (데이타...)" 라구 하는 것이 자료추가하는 질의어입니다.
VALUES ( 다음에 보면 처음에 '' 라고 되어 있죠?
이넘이 바로 id입니다. 즉 인위로 값을 넣지 않죠.
하지만 위에서 정의한 대로 auto_increment 이기 때문에 저절루 순서가 매겨집니다.
그리고 2번째 이름은 문자열 이기 때문에 '로 둘러싼 것 입니다. (" 쓰면 안됩니다.)
그리고 3번째 나이는 정수형이기 때문에 ' 가 필요없습니다.
이 질의어를 mysql_query를 통해서 MySQL에 일을 냅따 시킵시다.

mysql_query( $que, $connect ) or echo"mysql_error()";

그럼 이제 Human_Info라는 테이블에는 id 값이 0인 첫 번째 값이 들어간거죠.

4. Table의 자료 제거
이제 만들어 봤으니 제거 하는 방법을 알아 봅시다.
제거하는 방법은 추가하는 것보다 더 쉽습니다.

$que = "delete from Human_info where id=0";
mysql_query( $que, $connect );

delete from 테이블명 where 조건문 하면 됩니다. 그러고 $que를 MySQL에 넘겨주면 지웁니다.

위이 예에서는 Human_Info라는 테이블에서 id값이 0인 넘을 지우라는 거죠.
where id=0 했으니깐요.
만약 where age=20 하면 Human_info 테이블에서 age=20 인넘들은 모두 지우죠.

5. Table의 자료 수정
자료의 수정방법도 매우 쉽습니다.

$que = "UPDATE Human_Info SET name='막둥이' WHERE id=0";
mysql_query( $que, $connect );

수정할 때는 "UPDATE 테이블명 SET 수정할넘=수정할값 WHERE 조건문" 하믄 됩니다.

콤마(,)를 이용해서 여러개를 바꿀수 있습니다.

6. Table의 자료 출력

자 이제 만들고, 지우고, 수정하는 걸 알았으니 원하는 자료를 테이블에서 불러오는 방법을 해봅시다.

$que = "SELECT * FROM Human_Info";
$data = mysql_query( $que, $connect );

바로 SELECT, FROM을 이용해서 가져옵니다.
* 는 모든 것을 가져오라는 겁니다.
만약 name만 필요하다면 SELECT name FROM Human_Info 라구 하면 되고요.
name과 age가 필요하면 SELECT name, age FROM Human_Info 라고 하면 되죠.

Query문을 mysql_query를 통해서 MYSQL에 전달하면 mysql_query() 함수는 찾은 결과를 return 하게 됩니다.
위에서는 $data라는 변수에 결과값을 저장하였죠.
그럼 $data 변수안에는 찾은 결과가 배열의 형태로 입력되어져 있습니다.
그럼 우선 몇 개가 찾아졌는지 함 알아봅시다.

$total = mysql_affected_rows();

위와 같이 하면 총 몇 개가 찾아졌는지 알수 있습니다.
mysql_affected_rows() 이라는 함수는 찾아진 값의 갯수를 return 합니다.

자 그럼 이제 $data안에 있는 내용을 출력하기로 해봅시다.

출력하기 위해서는 mysql_data_seek($data,$i) 라는 함수를 알아야 합니다.

mysql_data_seek()는 $data 파일에서 $i 번째의 데이터를 지정시켜 놓는 함수입니다.

즉 mysql_data_seek($data,0) 이라고 하면 찾아진 결과의 첫 번째 데이타를 지정해 놓는 거죠.

지정을 했으면 다음과 같은 방법으로 값을 가져옵니다.

$human = mysql_fetch_array( $data );

mysql_fetch_array()는 $data에서 지정된 넘의 값을 배열로 return 합니다.
즉 $human[id], $human[name], $human[age], $human[tel_num], $human[address] 가 되는거죠.

출력할 때는 echo"이름 : $human[name], 나이 : $human[age]살"로 하면 되죠.

이름 : 아무개, 나이 : 20살

위에 처럼 출력 되겠죠.

그럼 리스트처럼 주르륵 하기 위해서는 for문을 사용하면 됩니다.

for($i = 0; $i < $total; $i++)
{
mysql_data_seek($data,$i);
$human = mysql_fetch_array( $data );
echo"이름 : $human[name], 나이 : $human[age]살 
";
}

위와 같이 하면 주르륵 나오겠죠?

쉽죠?

그럼 select 문에 대해서 몇가지만 더 적겠습니다.

$que = "SELECT * FROM 테이블명 order by id";

위에 처럼 하면 order by id 라는 구문 때문에 id의 정렬순으로 결과가 나옵니다.

만약 역순으로 할려면 order by id desc 라고 하면 되지요.

그리고 limit 숫자 하면 숫자만큼의 갯수만 나옵니다.
$que = "SELECT * FROM 테이블명 order by id limit 10";
위에 처럼 하면 10개만 나오죠.

만약 검색처럼 어떤 문자열을 포함하고 있는 넘을 찾을 때는 다음과 같이 하면 됩니다.
이름에 "김"이 포함된 넘을 찾는 다고 합시다.
$que = "SELECT * FROM 테이블명 WHERE name LIKE '%김%'";
위에서 WHERE라는 넘은 아까도 나왔지만 조건을 붙일 때 쓰는 넘입니다.
그리고 LIKE '%검색문자%' 라구 덧 붙이면 name 필드중 "김" 이라는 문자가 있는 넘을 찾아라는 겁니다. 

Posted by SB패밀리


[PHP/DB] Database, MySQL 이란 무엇인가


http://www.nzeo.com/bbs/zboard.php?id=p_study&page=2&sn1=&divpage=1&category=67&sn=off&ss=on&sc=off&select_arrange=headnum&desc=asc&no=42000-03-06 03:21:32

우선 PHP문법에 들어가기 전에 간단하게 Database에 대해서 이야기하겠습니다.
얼마전까지만 해두 CGI라구 하면 펄을 생각하게 되었구 오라클이나 MySQL같은 DBMS(데이터베이스 관리시스템 : Database Management System)은 최소한 웹상에서는 들리지 않았습니다.
그런데 PHP라는 CGI 프로그래밍 언어가 등장하면서 DB라는 이야기가 많이 들리게 되었습니다.
그럼 왜 PHP는 펄과는 다르게 DB를 이용하는지, 그리고 이 DB가 무엇인지 간단히 이야기하겠습니다.
데이터 베이스는 데이터를 모아둔 것입니다.
예를 들면 학교 도서관의 도서 데이터베이스가 있겠죠.
즉, 도서관에 어떤 책이 들어왔는지, 그 책들의 작가는 누군인지, 누가 대여해갔는지 하는것들이 모두 데이터베이스 안에 들어있겠죠.
이런 데이터들은 가만히 있는 것이 아닙니다.
새로 책들이 들어왔을수도 있고, 폐기되었을수도 있죠. 누가 빌려갈수도, 반납할수도 있는겁니다.
즉, 데이터베이스는 이러한 요인들에 의해서 저장된 데이터를 변경할수 있어야 하죠.
이렇게 데이터베이스를 만들고 관리하는등의 일을 하는 프로그램들을 데이터베이스 관리 시스템 (Database Managemenu System)이라고 합니다.
이 데이터베이스 관리 시스템이 하는일은 데이터를 저장하고 삭제하는 등의 일과 이 데이터들로부터 원하는 정보를 효율적이고 빠른 방법을 제공하는 것이겠죠.
이렇게 데이터베이스에서 데이터를 관리하기 위해서 데이터베이스에 명령을 전달하게 하는 언어를 데이터베이스 관리언어(DBME)라고 합니다.
DBME는 Query라는 데이터베이스 관리 프로그램의 언어를 이용해서 데이터를 관리하게 됩니다.
이런 데이터베이스 관리시스템들은 다양한 종류가 있습니다.
공개되어 있는, 그리고 우수한 성능을 가지고 있어서 널리 알려진 MySQL도 있구, 상용인 오라클도 있고, 그외에 mSQL, PostgreSQL등도 있습니다.
우리가 사용할 MySQL은 무료로 쓸수 있게 공개된 관계형 데이터베이스로서 일반 상용에 비해서 별루 뒤질것이 없는 좋은 프로그램입니다.
안정성 및 무결성의 측면에서 여타 상용 데이터베이스에 비해서 떨어진다고는 한다지만 관리만 잘하면 매우 유용하게 사용할수 있습니다.
MySQL의 주요목표는 속도, 뛰어난 수행능력 그리고 사용의 편리함입니다.
처음에 MySQL은 TcX 내부에서 자체적으로 사용할 목적을 가지고 만들어졌다고 합니다.
TcX는 1996년부터 MySQL을 사용해 왔으며 현재 700만 레코드이상되는 500개 이상의 테이블(100기가 바이트 이상)이 주요업무에 사용되고 있다고 하니 어느정도의 중소업체에서도 충분히 사용할 수가 있습니다.
데이터 베이스 관리 시스템이 어떠한 식으로 데이터를 관리하는지에 대해서는 언급하지 않겠습니다.
물론 저도 잘 모릅니다.
그럼 직접적으로 우리가 알아야 하는 것을 이야기하겠습니다.
보통 MySQL을 지원하는 계정에서는 회원들에게 하나의 DB를 줍니다.
근데 잘 모르는 분덜은 왜 하나만 주나, 나는 게시판 여러개 하구 방명록도 DB를 이용하는 넘으로 할건데~ 하구 의아해하시는 분덜이 계실겁니다.
결과부터 말하자면 하나의 DB안에는 많은 수의 게시판이나 방명록등의 데이터를 저장할수 있습니다.
DB를 이용하는 PHP 게시판들은 데이터를 테이블에 저장합니다.
이 테이블은 하나의 DB안에 무한정은 아니지만 MySQL이 허락하는한 만들수 있습니다.
MySQL과 같은 관계형 데이터베이스는 모든 데이터를 테이블과 같은 형태로 나타내어 저장합니다.
테이블에 대해서 간단히 이야기하겠습니다.
일반적으로 보통 표라는 것을 많이 이용합니다.
시간표 같은것 말입니다.
예를 들문 시간표는 가로줄을 요일, 세로줄을 시간으로 해서 만들면 매우 편하게 만들수가 있습니다.
데이터베이스도 마찬가지입니다. 저장되는 데이터를 테이블(표)와 같은 형식으로 저장하고 관리를 합니다.
여러가지의 속성을 가진 대상들의 데이터를 테이블의 형태로 만드는 것입니다.
시간표를 예를 들면 월, 화, 수요일등과 같은 대상의 속성을 정의하여 만든 틀을 스키마라고 합니다.
만약 학생의 예를 들면 학생=(이름, 학번, 학과, 학점) 등과 같은 스키마를 가지게 만들수 있습니다.
게시판을 예로 들자면 게시판=(번호, 글쓴이, 메일주소, 홈페이지 주소, 제목, 내용, 조회수, 글쓴날자)등과 
같이 스키마를 만들수 있겠죠.
이런 스키마의 틀로 이루어진 테이블을 가지고 php 게시판등에서는 데이터를 저장, 삭제, 수정하는등의 관리를 하게 됩니다.
사실  PHP로 DB를 이용하는 CGI 프로그램을 만들기 위해서는 이 정도의 개념만 잡혀 있으면 충분하다고 봅니다.
그만큼 PHP 자체내에서 DB를 쉽게 이용하게 할수 있는 함수들이 제공되고, 또 MySQL의 Query문도 매우 쉽기 때문입니다.

참고로 PHP를 사용하는데 있어서 아파처서버가 권장됩니다.
A.P.M 이라는 말을 들어보셨는지요.
Apache , PHP, MySQL이라는 말입니다.
원래 PHP가 아파치서버와 MySQL을 배경으로 해서 만들어졌다고 합니다.

Posted by SB패밀리
모바일 브라우저 여부 체크를 하는 php 함수 찾기가 어렵네요.

가장 잘되어 있는 곳

 

Posted by SB패밀리



PHP로 구현된 화니지니 housewife ver 0.3 가계부 공개용

이 소스를 가지고 공부하시거나 입맛에 맞게 변형하여 사용하시면 자기만의 가계부로 좋을 듯 해보입니다.

필요사항

웹서버 + PHP + MySQL

제작: 소백촌닭님(http://aplus.pe.kr)



Posted by SB패밀리

모바일 브라우저 여부 체크를 하는 php 함수 찾기가 어렵네요.

가장 잘되어 있는 곳
자신의 아파치 웹로그에서 직접 찾는 방법으로,

#!/bin/sh
#
# 웹로그에서 폰 브라우저만 추출
#
# 2009.4.13(월)
# by 좋은진호(truefeel, http://coffeenix.net/ )

DATE="20090412"
if [ "$1" != "" ]; then
	DATE="$1"
fi

for ph in SCH- SPH- SGH- LG- CANU IM- EV- iPhone Nokia BlackBerry
do
	echo "* search : $DATE & $ph"
	grep -h $ph access.log.${DATE}* > phone-${DATE}_${ph}.txt
	sleep 1
done

#
awk -F\" '{print $6}' phone-${DATE}_* |sort | uniq > phone-list_${DATE}.txt


그러니깐 잠깐 생각을 해보면,
당장 iphone과 삼성 옴니아, 그리고 LG풀브라우저에서 찾을려면,
iphone, samsung, lgtel, mobile 4문장이 들어간 것을 모바일로 보면 될 것 같습니다.

// 웹브라우저 user agent 체크
if( preg_match('/(iphone|samsung|lgtel|mobile)/i', $_SERVER['HTTP_USER_AGENT']) ) {
   //모바일이면
}

그래서 sitehis.com은
해더 테일 스킨을 다음 처럼 만들고,
<html>
<body>
<link href="/css.css" rel="stylesheet" type="text/css" />
모바일용 게시판 뷰어 페이지입니다. [<a href="<?=$_SERVER['REQUEST_URI']?>&mobileagent=no">PC용보기</a>]
<hr />
{{BODY}}
</body>
</html>

read.php에 다음처럼 넣었습니다.
// 웹브라우저 user agent 체크
 //echo $_SERVER['HTTP_USER_AGENT'];
 if( $_GET['mobileagent']=='yes' or ($_GET['mobileagent']!='no' and preg_match('/(iphone|samsung|lgtel)/i', $_SERVER['HTTP_USER_AGENT'])) ) {
    //모바일이면
    $dbinfo['html_skin'] = 'mobile';
 }


그리고 모바일에 어떻게 보이는지 보고 싶으시면, 모바일로 보시거나 &mobileagent=yes 넣어서
다음링크에서 보시면 됩니다.
http://www.sitehis.com/spb3/sboard3/read.php?db=talk&cateuid=8&uid=207&mobileagent=yes 



더 좋은 방법 아시면,
댓글이나 트위터 http://twitter.com/sitehis 으로 알려주세요

출처: http://www.sitehis.com/spb3/sboard3/read.php?db=talk&cateuid=8&uid=207
Posted by SB패밀리



[개발/PHP] web php unicode 문자열 urldecode

문자열 : %uXXXX


<?php

function decode_unicode_url($str)
{
  $res = '';

  $i = 0;
  $max = strlen($str) - 6;
  while ($i <= $max)
  {
    $character = $str[$i];
    if ($character == '%' && $str[$i + 1] == 'u')
    {
      $value = hexdec(substr($str, $i + 2, 4));
      $i += 6;

      if ($value < 0x0080) // 1 byte: 0xxxxxxx
        $character = chr($value);
      else if ($value < 0x0800) // 2 bytes: 110xxxxx 10xxxxxx
        $character =
            chr((($value & 0x07c0) >> 6) | 0xc0)
          . chr(($value & 0x3f) | 0x80);
      else // 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx
        $character =
            chr((($value & 0xf000) >> 12) | 0xe0)
          . chr((($value & 0x0fc0) >> 6) | 0x80)
          . chr(($value & 0x3f) | 0x80);
    }
    else
      $i++;

    $res .= $character;
  }

  return $res . substr($str, $i);
}
?>

Simple test with japanese characters,
combined with urldecode:

<?php

$str = decode_unicode_url('%u65E5%u672C%u8A9E');
print(mb_convert_encoding(urldecode($str), "sjis", "euc-jp, utf-8, sjis") . '<br/>');
?>

Posted by SB패밀리

excel.php 라는 파일을 하나 만드시고 링크를 검색조건과 동일하게 변수와 값을 excel.php로 링크를 걸어주면 됩니다.

아래는 excel.php의 해더 만드는 부분입니다.

$filename = "excelfilename.xls";

header( "Content-type: application/vnd.ms-excel" );
header( "Content-Disposition: attachment; filename=$filename" );
header( "Content-Description: PHP4 Generated Data" );

이후 화면출력은 html화면 출력과 같이 html태그 사용으로 표만들어서 뿌려주면..

excel에서도 똑같이 보입니다 ^^

일반 목록 테이블처럼 table태그로 제목 달아주고 그 이후 tr,td태그로 내용 출력해주고 하면 알아서 뜹니다^^

html은 테스트 해보시면서 잘 꾸며보세요^^


- 쌈꼬쪼려 소백촌닭™ -

Posted by SB패밀리

자바스크립트로
현재 팝업창이고 팝업창을 호출한 opener 윈도우를 reload하기 위해
Opener.location.reload() 수행시 경고창 안 뜨게 하는 방법은



위와 같은 창이 안뜨게 하는 방법은

opener 윈도우에서 form 태그를 수정하면 된다.

<form id="form1" name="form1" method="get">

이렇게 하고 호출하면 경고창이 뜨는 문제는 없다.

하지만 다른 복병이 있을 수 있으니 조심하자.
Posted by SB패밀리