1. explode(분리문자열, 문자열)

     => 분리문자(열)를 기준으로 문자열을 배열로 저장한다.

2. implode(결합문자열, 문자열)

     => 결합문자(열)를 이용하여 문자열을 합쳐준다.

3. substr(문자열, 자르는 위치, 자를 수)

     => 문자열을 일정 위치에서 크기수만큼 잘라 준다.

4.  str_split(문자열)

     => PHP5이상에서 사용이 가능하며 크기가 일정하거나 알 수 없는 경우 사용 가능

5. echo "문자열"

     => 기본 출력 함수

6. ereg(검사할 문자, 검사대상문자열)

     => 문자열내 검사할 문자가 포함되었는지 검사

         eregi는 대 소문자를 구별하지 않는다.

7. header("location:이동할페이지")

     => 화면의 어떤 출력문보다 먼저 나와야 함. 다르 페이지로 이동시 사용.

          유사한 명령으로 meta태크나 java script에서 location.href="이동할 페이지" 가 있다.

8. ltrim(문자열)

     => 시작 공백제거

         반대 함수가 chop이다.

9. mb_strlen(문자열, 코딩방식)

     => 문자열의 길이를 알아내는 방식. 'euc-kr'로 설정시 한글인식이 된다.

10. nl2br

     => 문자열의 모든 줄바꿈 앞에 HTML 줄바꿈 태그를 생성한다.

11. ord(문자)

     => ASCII 번호 출력

12. phpinfo

     => 기본 정보 출력

13. print_r($변수)

     => 변수값 출력

14. strrev

     => 문자열을 역순으로 출력

15. strtoupper

     => 대문자 변경

          strtolower는 소문자로 변경한다.

16. trm(문자열)

     => 시작과 끝 공백 제거

'Web(웹) Study > PHP' 카테고리의 다른 글

date함수의 포맷문자열  (0) 2010.11.24
클래스 사용하기  (0) 2010.11.24
월의 마지막 날짜 구하기  (0) 2010.11.24
날짜의 요일 구하기  (0) 2010.11.24
php에 mssql을 사용하기  (0) 2010.02.12

date 함수에서 사용할 수있는  포맷문자열 입니다.


a : "am" 또는 "pm"
A : "AM" 또는 "PM"
d : 두자리로 표현되는 날짜, 즉 "01"~"31"
D : 세글자로 표현되는 요일, 즉 "Fri"
F : 월을 긴 문장으로 나타냅니다. 즉 "January"
h : 시간을 12시간 단위로 나타냅니다. "01"~"12"
H : 시간을 24시간 단위로 나타냅니다.
g : 시간을 12시간 단위로 0 없이 나타냅니다. "1"~"12"
G : 시간을 24시간 단위로 0 없이 나타냅니다. "0"~"24"
i : 분을 나타냅니다. "00"~"59"
j : 날짜를 0 없이 나타냅니다. "1"~"31"
l : (L의 소문자)요일을 나타냅니다. "Friday"
L : 윤년인지의 여부를 나타냅니다. "0" 또는 "1"
m : 달을 나타냅니다. "01"~"12"
n : 0 없이 달을 나타냅니다. "1"~"12"
M : 3글자로 달을 나타냅니다. "Jan"
s : 초를 나타냅니다. "00"~"59"
S : 영어에서 순서를 나타내는 2글자로 된 접미사; "th", "nd"
t : 주어진 달의 날 수; 즉 "28"~"31"
U : 기준시점(GMT 1970년 1월1일 00:00:00)으로부터 지난 시간을 초로 표시
w : 요일을 숫자로 표시합니다. 즉 "0"(일요일) ~ "6"(토요일)
Y : 4글자로 연도표시, "1999"
y : 2글자로 연도표시, "99"
z : 날짜를 표시, "0"~"365"
Z : 지역간의 시간편차를 초단위로 표시, 즉 "-43200"~"43200"

'Web(웹) Study > PHP' 카테고리의 다른 글

PHP 문자열 처리 함수  (0) 2011.01.10
클래스 사용하기  (0) 2010.11.24
월의 마지막 날짜 구하기  (0) 2010.11.24
날짜의 요일 구하기  (0) 2010.11.24
php에 mssql을 사용하기  (0) 2010.02.12

1. 클래스 정의

// class 키워드를 이용해서 클래스를 정의한다.
class Car {
    // 멤버 변수를 정의한다.
    var $color;
    var $speed;
   
    // 생성자
    function Car($color = 'red') {
        // $this 를 사용해서 멤버에 접근한다.
        $this->color = $color;
    }
   
    // 메소드를 정의한다.
    // 메소드 오버로딩을 지원하지 않는다.
    function speedUp($amount=1) {
        $this->speed += $amount;
    }
   
    function getSpeed() {
        return $this->speed;
    }
}



2. 클래스 사용하기

$car = new Car('blue');
$car->speedUp();
echo($car->getSpeed());



3. 상속하기
class Super {
    var $s_member;
   
    function s_method() {
        echo("call s_method()...\n");
    }
}

 

// extends 키워드를 이용해서 상속한다.
// 다중상속은 지원하지 안는다.

class Child extends Super {
    var $c_member;
   
    function c_method() {
        echo("call c_method()...\n");
    }
}

 

$super = new Super();
$super->s_member = 10;
$super->s_method();

 

$child = new Child();
$child->c_member = 5;
$child->c_method();

 

// 상속받은 부모의 속성을 사용할 수 있다.
$child->s_member = 10;
$child->s_method();

 

// 부모객체는 자식의 속성을 사용할 수 없다.
$super->c_member = 3;
$super->c_method();

 

출력 결과)
call s_method()...
call c_method()...
call s_method()...

 

Fatal error: Call to undefined method Super::c_method() in D:\workspace\PHPTest\test.php on line 34



4. 오버라이딩
class Super {
    var $member = '부모의 기본값';
   
    function operation() {
        echo("부모의 메소드 호출.\n");
        echo("\$member의 값은 {$this->member}\n");
    }
}

 

class Child extends Super {
    var $member = '자식의 기본값';
   
    function operation() {
        echo("자식의 메소드 호출\n");
        echo("\$member의 값은 {$this->member}\n");
       
       
        echo("\n부모값 호출\n");
       
        // 부모의 속성을 호출하기 위해서 parent 키워드와 :: 연산자를 사용한다.
        parent::operation();
    }
}

 

$super = new Super();
$super->operation();
echo("\n");
$child = new Child();
$child->operation();

 

출력 결과)
부모의 메소드 호출.
$member의 값은 부모의 기본값

 

자식의 메소드 호출
$member의 값은 자식의 기본값

 

부모값 호출
부모의 메소드 호출.
$member의 값은 자식의 기본값


5. 객체 비교하기
// 객체의 비교는 == 연사자를 이용하고, 속성들의 값이 동일할 때만  true 이다.
$car1 = new Car();
$car2 = new Car();
if($car1 == $car2) {
    echo("TRUE...\n");
} else {
    echo("FALSE...\n");
}

 

$car2->speedUp();
if($car1 == $car2) {
    echo("TRUE...\n");
} else {
    echo("FALSE...\n");
}

 

$car3 = new Car('blue');
if($car1 == $car3) {
    echo("TRUE...\n");
} else {
    echo("FALSE...\n");
}

출력결과)
TRUE...
FALSE...
FALSE...

'Web(웹) Study > PHP' 카테고리의 다른 글

PHP 문자열 처리 함수  (0) 2011.01.10
date함수의 포맷문자열  (0) 2010.11.24
월의 마지막 날짜 구하기  (0) 2010.11.24
날짜의 요일 구하기  (0) 2010.11.24
php에 mssql을 사용하기  (0) 2010.02.12
특정월의 마지막 날짜를 구하는 방법입니다.

날 수를 구하는것과 같겠죠..^^

방법은 date함수의 포맷문자열 't'를 사용합니다.

$day_count = date('t', strtotime("2010-09-01"));

다음도 됩니다.

$day_count = date('t', mktime(0, 0, 1, 9, 1, 2010));

mktime함수의 인자는 순서대로 시간, 분, 초, 월, 일, 년도 입니다.

'Web(웹) Study > PHP' 카테고리의 다른 글

date함수의 포맷문자열  (0) 2010.11.24
클래스 사용하기  (0) 2010.11.24
날짜의 요일 구하기  (0) 2010.11.24
php에 mssql을 사용하기  (0) 2010.02.12
PHP에서 "HTTP / HTTPS" Request하기  (0) 2009.11.18

다음과 같은 날짜를 나타내는 문자열이 있을때 이 날짜의 요일을 구하는 방법 입니다.

$day = "2010-09-01";

날짜의 요일정보는 date 함수의 'w' 포맷 문자열을 사용해서 구할 수 있습니다.

반환되는 값은 0부터 6까지의 숫자값으로 일~토 까지를 나타냅니다.

그러면 다음과 같이 사용할 수 있습니다.

$yoil = array("일","월","화","수","목","금","토");

echo($yoil[date('w', strtotime($day))]);

'Web(웹) Study > PHP' 카테고리의 다른 글

클래스 사용하기  (0) 2010.11.24
월의 마지막 날짜 구하기  (0) 2010.11.24
php에 mssql을 사용하기  (0) 2010.02.12
PHP에서 "HTTP / HTTPS" Request하기  (0) 2009.11.18
빠른 PHP 속도를 유지 하기 위한 것.  (0) 2009.10.06
php에 mssql을 사용하게 되었네요.

mysql_connet처럼 당연히  mssql_connect 함수가 있길래 똑같이 해봤습니다만,
당연히 아무런 셋팅이 없으면 mssql_connect를 사용할 수가 없습니다.

첫번째 직면하는 에러문제는 undefined function이라는 겁니다..
이문제는 mssql 라이브러리를 링크하면 해결됩니다.
extension에 php_mssql.dll을 추가해주세요..

두번째 문제는 unable to connect server입니다..
연결이 안되지요.

이 문제는 두가지로 해석할 수 있습니다.

해당 사용자의 외부접속을 mssql서버에서 막았거나, php에서 해당 서버로 접속을 연결할 수 없다는거죠.

전자는 sql서버에 권한을 넣음으로써 해결할 수 있습니다.

후자 문제는 php서버와 sql서버가 같으면 발생하지 않을 수 있지만, 제가 테스트 하는 환경에서는 나타나더군요.

문제 해결은 다음과 같습니다.

sql이 설치된 서버의 windows/system32 폴더의 ntwdblib.dll 파일을
php가 설치된 서버의 windows/system32 폴더로 복사하고 서버를 재시작 하는 것입니다.

이러니 문제가 해결되더군요. 오늘도 밥값을 한거 같아 기쁩니다.

ps. 당연히 삽질 많이 했습니다.
한달전에 연결안되는 문제를 확인하고 바빠서 덮어두었는데..
이제서야 찾아서 해결책을 올리네요-0-

ps2. 두개의 파일이 다른점은 사이즈로 비교하시기 바랍니다.
sql이 설치된 서버의 ntwdblib.dll파일 사이즈는 284kb이고..
php가 설치된 서버의 ntwdblib.dll파일 사이즈는 273kb입니다.
파일을 첨부합니다~ ㅋ

(MSSQL)-, (PHP)- 확장자는 지우고 사용하세요~

'Web(웹) Study > PHP' 카테고리의 다른 글

월의 마지막 날짜 구하기  (0) 2010.11.24
날짜의 요일 구하기  (0) 2010.11.24
PHP에서 "HTTP / HTTPS" Request하기  (0) 2009.11.18
빠른 PHP 속도를 유지 하기 위한 것.  (0) 2009.10.06
PHP로 소켓 서버 작성하기  (1) 2009.10.06

<?php

/* ----------------------------------------------
 GET HTTP PAGE...
 2006.02.17 copied by Leah. from php.net
---------------------------------------------- */

class HTTPRequest
{
   var $_fp;        // HTTP socket
   var $_url;        // full URL
   var $_host;        // HTTP host
   var $_protocol;    // protocol (HTTP/HTTPS)
   var $_uri;        // request URI
   var $_port;        // port
  
   // scan url
   function _scan_url()
   {
       $req = $this->_url;
      
       $pos = strpos($req, '://');
       $this->_protocol = strtolower(substr($req, 0, $pos));
      
       $req = substr($req, $pos+3);
       $pos = strpos($req, '/');
       if($pos === false)
           $pos = strlen($req);
       $host = substr($req, 0, $pos);
      
       if(strpos($host, ':') !== false)
       {
           list($this->_host, $this->_port) = explode(':', $host);
       }
       else
       {
           $this->_host = $host;
           $this->_port = ($this->_protocol == 'https') ? 443 : 80;
       }
      
       $this->_uri = substr($req, $pos);
       if($this->_uri == '')
           $this->_uri = '/';
   }
  
   // constructor
   function HTTPRequest($url)
   {
       $this->_url = $url;
       $this->_scan_url();
   }
  
   // download URL to string
   function DownloadToString()
   {
       $crlf = "\r\n";
      
       // generate request
       $req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf
           .    'Host: ' . $this->_host . $crlf
           .    $crlf;
      
       // fetch
       $this->_fp = fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port);
       fwrite($this->_fp, $req);
       while(is_resource($this->_fp) && $this->_fp && !feof($this->_fp))
           $response .= fread($this->_fp, 1024);
       fclose($this->_fp);
      
       // split header and body
       $pos = strpos($response, $crlf . $crlf);
       if($pos === false)
           return($response);
       $header = substr($response, 0, $pos);
       $body = substr($response, $pos + 2 * strlen($crlf));
      
       // parse headers
       $headers = array();
       $lines = explode($crlf, $header);
       foreach($lines as $line)
           if(($pos = strpos($line, ':')) !== false)
               $headers[strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos+1));
      
       // redirection?
       if(isset($headers['location']))
       {
           $http = new HTTPRequest($headers['location']);
           return($http->DownloadToString($http));
       }
       else
       {
           return($body);
       }
   }
}

// Example
//$r = new HTTPRequest('가져올 사이트 주소');
//echo $r->DownloadToString();

?>

'Web(웹) Study > PHP' 카테고리의 다른 글

날짜의 요일 구하기  (0) 2010.11.24
php에 mssql을 사용하기  (0) 2010.02.12
빠른 PHP 속도를 유지 하기 위한 것.  (0) 2009.10.06
PHP로 소켓 서버 작성하기  (1) 2009.10.06
PHP 함수정리  (0) 2009.10.06
이 속도 테스트 보다 더 중요한 것이 PHP보안 입니다. 보안이 가장 중요함당 !!!

PHP로 코딩 함에 있어서 알아야 할 속도 테스트 입니다.
조금더 빠른 PHP 속도를 유지 하기 위한 것이죠 ^^

작은 것이 모여서, 대따 오랜 시간이 걸릴 수 가 있는 것 입니다. !!
되도록이면 속도가 빠른 것을 사용하시는 것이 좋습니다.

물론 함수 마다 기능 마다 장단이 있지만요....^^

다른 비교가 있으면 알려주셍 ^^ 답변 달아 주세용 ^^
계속 적으로 업글 됩니다.

★ mysql 총 게시물 수 세기
<?php     $numresults=mysql_query("select code from $board");     $numrows=mysql_num_rows($numresults);     //2초 이상 ...게시물 10만개 ?> VS <?php     $numresults=mysql_query("select count(code) as code from $board");     $row_num=mysql_fetch_array($numresults);     $numrows=$row_num[code]; // 0.2  ...게시물 10만개 ?> 아래것이 훠얼씬 빠름다.. 도대체 mysql_num_row() 는 왜 만들어 놓은 것일까용???  


★ mysql_fetch_row  > mysql_fetch_array >>> mysql_result 입니다.

row 가 array 보다 약간 빠르고, result 보다는 훠얼씬 빠름당 ^^ row 는 불편한게 숫자로 칼럼을 불러와서 불편합니다. array 가 약간 느리지만, 문자 칼럼을 불러 올 수 있으니 array 쓰는 것도 양호 ^^ 아직도 mysql_result() 를 사용하시나요?  

★print , echo ,printf 함수 속도 비교
HTML 출력 >> echo > print >> printf print 와 printf 함수는 복잡한곳에 적격이고, 약간 느리다. echo 는 단순한곳에 적격이고...빠르다. printf 는 형식화된 출력을 해주므로 그래도 좋죠 ^^  

★  인라인

a.php <?php     $aa="sdsdsdsd";     echo ("       <table>       <td> $aa </td>       </table>       "); ?> 위 랑.. b.php <?php $aa="sdsdsdsd"; ?> <table> <td><?=$aa;?></td> </table> 랑 도대체 어케 코딩 하느냐죠 ? 솔직히 코딩은 a.php 가 편합니다. <?php ?> 를 한번 만 쓰니까 효율적일 수 있습니당.. 그러나 아무리 아무리 PHP가 빠르다고 해도 HTML 이 더 빠릅니당.. !!! 쿠쿠쿠 b.php 처럼 코딩 하는 습관을 가지세용 ^^ 변수가 많아 질 경우 b.php 파일이 느립니다. 그러나 소스 코드 분리 측면에서는 b.php 파일 형태가 좋습니다. 이 부분은 여러분들이나 저나 각종소스를 가지고 연구해 봐야만 할검당 ^^  


★ zend cache , APC ,Bware 캐쉬 비교
Zend cache > APC > Bware zend cache 는 캐쉬 입니다. 울나라에서 포탈에서도 몇군데 사용하죠. PHP 프로그램 변환 없이 속도를 빠르게 해 줍니다. ^^ zend cache 를 살 돈이 없으시다구용? 그러면 APC 나 zend optimizer 를 반드쉬 설치 하세용 !! ■ 그런디 Zend Cache 만한 무료 캐쉬가 나왔다고 합니당...^^ http://www.php-accelerator.co.uk/index.php 도대체 캐쉬의 작동 원리는 어케 되는가? 캐쉬는 여러가지로 작동 할 수 있습니다. 가장 많이 아는 것이 메모리에 페이지를 띄워 놓고 읽어 오는 것입니다. 하드에서 읽는 것 보다 빠르기 때문이죠. 그리고 HTML 로 만드는 것도 캐쉬 입니다.조금 더 빠르다면 캐쉬 라고 할 수 있습니다. 게시판 목록 보기 페이지는 디비 연결이 많습니다. 쓰기 보다 , 읽기가 20배 정도 많습니다. 게시판을 마니 운영해 봤다면 아시겟죠 ^^? 그래서 게시판 목록을 HTML 로 저장 시키고, 쓰기, 삭제 가 있을때 마다 HTML 로 만들어 주는 것 입니다. 그러면 디비 부하는 상당히 줄어 듭니다. 또는 코딩을 할때 enter 이나 tab 키를 많이 사용해서 합니다. 저번에 본 캐쉬는 enter 이나 tab 키를 없에 주는 캐쉬 였습니다. enter 이나 tab 를 없엘 경우 최대 1-2k 정도 절약이 되죵 ^^  


★ ereg_replace <<<  preg_replace 정규표현식
ereg_replace () 가 장난 아니게 느림다. 40개 정도 변환 하는데 1초나 걸려요.preg_replace 는 0.3초 정도요. 되도록이면 preg_replace() 를 사용하세요 !!! www.php.net/preg_replace tood.net preg_replace 강좌 http://www.tood.net/tood/toodboard/toodread.php?board=tootech&tcode=907  


★ foreach , list 함수 속도 차이 35%
foreach($string as $a);  >>>  while(list(,$a) = each($string)); foreach() 를 사용하는 것이 35% 정도 빠릅니다...!!  

★ explode() Vs split() Vs preg_split
explode() 와  split() 와 preg_split 는 문자열을 자르는 함수 입니다. 테스뚜 해보시면 아시겟지만 explode() 가 훨 빠릅니당..!!! 70% 정도 빠릅니다.  



★mysql_connect Vs mysql_pconnect
서로 장단이 있다 합니다. mysql_pconnect 가 더 빠르다고 합니다. persistant 메뉴얼에 영구적인 이렇게 되어 있으니까요.. 일정시간 동안 mysql 을 열어 놓기 때문에, 다시 열 필요가 없어서 빠르다고 합니다. 단점은 계속 열기 때문에 메모리를 많이 잡아 먹슴당...^^ mysql_pconnect 경우는 최소 메모리가 1G 이상 되어야 사용하시는 것이 좋습니다.  


★ 큰따옴표(") , 작은 따옴표(')
큰따옴표는 PHP가 파싱을 합니다. 그러나 작은 따옴표는 파싱을 하지 않습니다. 작은 따옴표를 사용하시는 것이 빠릅니다. 코딩시 echo ' test '.$aaa.' tood '; 요런식으로 하시는 게 가장 빠름당 !!  


★ mysql 데이터 저장 공간 크기 ?
id int(11) unsigned NOT NULL auto_increment,    bbs smallint(5) unsigned NOT NULL,    lens mediumint(8) unsigned NOT NULL,    int 도 무자게 많슴당.. 각각의 크기에 맞게 하는 것이 속도가 빨라 집니당 ^^ not null 를 주는 것도 속도가 빨라 집니당.. 작은 사이트 조회수 경우 1만을 넘기도 힘듭니다. 그럴 경우 smallint 를 사용하시면 됩니다.  


★ where 절에 모든 것은 인덱스를 걸어라 !!!
mysql 에서 쿼리시에 where 절에 사용되는 비교의 칼럼은 반드쉬 인덱스를 거세용 !!! mysql 인덱스 가 여러 분들의 게시판 속도를 업 시켜 줍니당 !!  


★메인페이지에서 속도를 빠르게 하려면, .htm 으로 만드는 것이 좋습니다.
그러니까..제 사이트 페이지 오른쪽 에는 모두 최신 게시물로 디비를 불러오는 부분 입니다. 디비 연결은 부하를 줄 수 있습니다. 그러니까..이예는 사이트가 상당히 활성화된 사이트일 경우 입니다. 하루에 2번 정도 .htm 으로 만들어 페이지를 업시키는 것이 좋습니다. 아무리 PHP가 빨라도 HTML 보다는 빠르지 않습니다.. !!! HTML 로 만드는 것은 생각 할것이 게시판 목록수 만큼 파일이 생성이 됩니다. 1만개 게시물이면 1만개 HTML 이 생기죠. 그런데 조회수가 보통 1000-3000 을 넘는 게시판 경우는 효율성이 중대 됩니다. 그러나 조회수가 100 비스므리 하다면...생각해봐야 합니다. 그러기 위해서는 ★cron 를 알아야 합니다 PHP강좌 게시판에서 cron 으로 검색하세용 !! 윈도우 사용자는 멀 쓰는지 잘 모르겠슴당...아시면 답글 부탁  ^^  


★ 초보자 Vs 전문가
www.zend.com 에서 제가 2000년 5월에 퍼온건데용 ^^   함 주석을 붙일까 해서용^^ Beginner vs Experienced    Author:  Boaz Yahav    Date  23/05/2000    Beginner : echo "$var";   Experienced : echo $var;   Beginner:echo "<a href=\"http://www.php.net\">PHP</a>";  ;; Experienced : ?><a href="http://www.php.net">PHP</a>; color="#0000CC"><?  ... ?>   ◆ "(따옴표) 가 굉장히 중요한것이라는 한 대목이죵 ^^ 전 보통의 경우 php 변수 값이 들어갈 경우는 초보자 처럼 쓰구요 ^^ 안들어 갈 경우 는 전문가 처럼 씀다. Beginner : $a[0]=1; $a[1]=2; $a[2]=3;   Experienced : $a = array(1,2,3, 1);   둘다 사용하는 데요. 전문가 쪽이 편함다. ^^ Beginner : if($a>1) { $b=2; } else { $b=3; }   Experienced : $b = ($a>1) ? 2:3;   요건 완존히 소스 어렵게 짜는 넘이 최고 라는 소리 같네용 ^^ 전문가 쪽것은 C 언어 에서 배웠는데도 역시 전 if 씀다. ^^ Beginner : $result=mysql_query(...);   Experienced: $result=mysql_query(...) OR die            (mysql_error());   요즘 들어 새삼 전문가 쪽으로 씀다.^^ 보통의 경우 <?php $result=mysql_query(...)   if (!$result) {      echo error()."<P>";      echo errno(); } ?> 이렇게 사용함다. ^^ or 이 설명이고 no 가 에러 번호 일 검다. ^^  


★MySQL,ADODB,PHPLib,PEAR 벤치마킹  
ADODB > PHPlib > PEAR MySQL     1.14      - ADODB     1.45     27% PHPLib    1.60     40% PEAR     2.87     152% (fetchInto) MySQL,ADODB,PHPLib,PEAR  는 모두 데이터베이스 인가요? 당근 아닙니다. MySQL만 데이터베이스 구요. ADODB,PHPLib,PEAR 는 PHP 프로그램 입니다. 3개 다 MySQL연결을 편하게 하는 클래스 프로그램 입니다. 그런디 벤치 마킹 결과 MySQL 에서 직접 쿼리하는 것 다음으로 ADODB 가 뽑혔슴당 ^^ PEAR 가 굉장히 늦군요. PEAR DB 나 ADODB 를 사용해 보았는데, 움..역시나 ADODB 가 좋군요. 오라클, mysql , ms sql 연결시 1개의 API 만 사용할 수 있는 프로그램 들 이 PEAR 과 ADODB 입니당 ^^  

★ 페이지 네비게이션- 페이지 분활
페이지 분활도 속도 차이가 납니다. 각각의 페이지 분활을 테스트 해보시면 아시겟지만, 10만개,20만개의 데이터를 넣어 보세요. 빠른것은 0.03초 정도, 느린것은 3초나 걸립니다. 인덱스를 걸어서 빨리 뜨는데, 머가 늦는 걸까 했는데, 페이지 네비게이션 알고리즘이 문제더군요. ^^  

★ 속도 테스트는 어케 하는가 ? microtime() 사용하면 됩니다.
<?php function pageTime($page) {  $mstart = explode(" ", $m);  $mend = explode(" ", microtime());  $mtime = ($mend[1] - $mstart[1]) + ($mend[0] - $mstart[0]);  echo " $m[1]  $mend[1]<P>";  echo " $m[0]  $mend[0]<P>";  print("tood.net 페이지 로딩 시간 : " . $mtime . " microseconds"); } pageTime(basename($PHP_SELF)); ?>    

조금 더 빠른 쿼리
$sql = "SELECT table.column FROM table WHERE criteria LIKE $myrow[variable]"; 아래 처럼 하면 파싱 되지 않기 때문에 아주 아주 쪼금 빨라 짐다..0.0000x 초; $sql = "SELECT table.column FROM table WHERE criteria LIKE " . $myrow['variable'];  

최적화 컴파일 옵션 사용 !
PHP counfigure 시에 최적화 방법 입니다. http://www.tood.net/tood/toodboard/toodread.php?board=tootech&tcode=1070   

'Web(웹) Study > PHP' 카테고리의 다른 글

php에 mssql을 사용하기  (0) 2010.02.12
PHP에서 "HTTP / HTTPS" Request하기  (0) 2009.11.18
PHP로 소켓 서버 작성하기  (1) 2009.10.06
PHP 함수정리  (0) 2009.10.06
무조건 알아야 할 PHP 속도 테스트 14 가지  (0) 2009.10.06
PHP로 소켓 서버 작성하기


대상 독자
요구사항
1 개요 - 소켓 서버란 무엇인가?
1.1 소켓의 형태
2 PHP 소켓 함수
2.1 PHP에서 소켓 만들기
2.2 실용 서버 만들기
2.3 실용적인 예
2.4 보안
가능한 기능 추가와 확장
저자에 관해

알아두기

이 자료는 http://www.zend.com/zend/tut/tutorial-staub3.php/에 있는
Writing Socket Servers in PHP를 제가 허접번역 및 내용을 추가 및 생략한 것입니다.
이미 다 아시는 내용 이시겠지만, 이해해 주시면 감사하겠습니다.
질문이나 번역을 바라는 주제가 있으시면,
이메일 또는 코멘트를 이용해 주세요. 참고로 전 영어, PHP 둘다 왕초보^^;.

대상 독자
인터넷 소켓 서버를 만들기 위해 PHP 소켓 함수 사용에 관심있는 분들..

미리 준비할 것
       
        * PHP 소켓 라이브러리. 이것은 컴파일 할 때 -enable-sockets 설정 옵션을 주시면 됩니다.
        * PHP의 CLI (Command Line Interface) 버전. 이것은 소켓서버가 커멘드 라인에서 실행하기 때문입니다.
        * 리눅스 운영체제
비록 리눅스를 사용한 따라하기이지만, 윈도우나 유닉스환경에서도 됩니다.
윈도우에서, PHP 소켓은 php.ini에서 externsion=php_sockets.dll부분의 주석을 제거해야
사용할 수 있습니다.

1 개요 - 소켓 서버란 무엇인가?

소켓 서버는 소켓 서버에 들어오는 요청과 응답을 대기하고있는 특정 포트에 할당하는 서비스입니다.
이메일 서비스(POP3, SMTP)와 웹서버는 소켓 서버의 좋은 예입니다.
HTTP(Web)서버는 들어오는 요청에 대해 포트 80에서 대기하고,
서버 안에 있는 HTML과 다른 파일(이미지, 동영상,문서)을 클라이언트 사용자에게 서비스 합니다.

소켓 서버는 주로 서비스나 데몬으로 끊임없이 실행됩니다.

쉽게 설명하자면, 우리가 네트워크 프로그래밍을 한다는 의미는 소켓이 제공하는 함수를 이용하여 프로그래밍을 한다는 의미입니다.
일상적으로, 소켓 프로그래밍과 네트워크 프로그래밍은 거의 같은 의미로 사용되고 있습니다.

1.1 소켓의 종류

정보가 인터넷으로 보내질 때, 그것은 주로 패킷으로 나누어집니다.  
왜냐하면 큰 용량을 패킷이라는 작은 단위로 쪼갠후에 보내야 하기 때문입니다.

패킷으로 정보를 쪼갤 때 두가지 다른 프로토콜이 있는데, 정보 형태에 대해 전송 필요조건에 의존하기 때문입니다.        
        * TCP(Transmmission Control Protocol) - 전송 패킷은 다른 끝에서 번호가 붙여지고 끝에가서 조립된다. 그들은전체 메시지를 형성하기 위해 조립된다 .
        TCP는 데이터의 손실이 없습니다.(만약 패킷을 잃어버리면, 재전송합니다.), 이메일처럼 완전한 받아야 하는 파일을 보낼때 적합합니다.
         * UDP(User Datagram Protocol) - 이것은 비연결 프로토콜입니다.
        TCP처럼 IP 프로토콜 위에서 실행됩니다.
그 차이는 UDP는 약간의 에러 복구 서비스를 제공하고 신뢰성이 없습니다.
UDP는 특별히 음악, 동영상 스트리밍처럼 스트리밍 데이타에 적합합니다.

2. PHP 소켓  함수

PHP 는 저 수준에서 소켓을 처리할 수 있습니다.
PHP3에서, PHP는 fsockopen()과 관련 함수로 처리하는 소켓을 도입하였습니다.
(네트워크 부분은 PHP공식 매뉴얼 http://php.net/network를 보세요).
PHP4에서는, PHP의 소켓은  BSD 스타일 소켓에 저수준 연결의 도입으로 멋지게 확장되었습니다.

참고: PHP에서 소켓 함수는 여전히 실험적이지만, 다음 버전에서 더욱 강화될 것입니다.
PHP 소켓함수는 잘만 작성하면 쓸만하다는 것을 테스트는 보여줍니다.

2.1. PHP로 소켓 만들기

PHP에서 저수준 소켓을 만드는 것은 C와 유닉스 소켓 프로그래밍에서 소켓 함수를 사용한것과 매우 비슷합니다.

간단한 예제로 시작해봅시다. 9000 포트에서 연결을 대기하는 소켓 서버는 입력으로 문자열을 받아들이고, 모든 공백 문자는 제거하고, 반환한다.


#!/usr/local/bin/php -q

<?
// 무한정 실행하기 위해 시간한계를 0으로 설정한다.
set_time_limit (0);

// 대기할 IP 주소와 포트번호를 설정한다
$address = '192.168.0.100';
$port = 9000;

// TCP 소켓을 만든다.
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// IP 주소와 포트번호를 소켓에 결합
socket_bind($sock, $address, $port) or die('Could not bind to address');
// 접속을 위해 대기를 시작한다
socket_listen($sock);

/* 들어오는 요청을 받아들이고 자식 프로세스로 그들을 처리한다 */
$client = socket_accept($sock);

// 클라이언트가 입력한 1024 바이트를 읽는다.
$input = socket_read($client, 1024);

// 입력받은 문자열에서 공백을 제거한다.
$output = ereg_replace("[ \t\n\r]","",$input).chr(0);

// 클라이언드에 출력을 보낸다.
socket_write($client, $output);

// 자식 프로세스를 닫는다
socket_close($client);

// 주 소켓을 닫는다
socket_close($sock);
?>

이 프로그램을 실행하려면, 첫 줄 #!/usr/local/bin/php -q 가 PHP CLI(or CGI) binary의 위치에 있어야 합니다.
여러분은 소스파일의 실행모드를 바꾸는 것이 필요합니다.
(chmod 755 socket_server.php)
실행하려면,  커멘드 라인에서 ./socket_server.php치고 엔터.
외관상 이 프로그램은 아무일도 않합니다.

그럼 각각의 라인을 자세히 살펴봅시다.

        * #!/usr/local/bin/php -q
        PHP CLI 실행파일을 실행합니다. -q 옵션을 쓰면 HTTP 헤더를 출력하지 않습니다.

        * $sock =sock_create(AF_INET, SOCK_STREAM, 0)
        '주인' 소켓을 만듭니다. 이 소켓은  들어오는 요청을 위해 대기할 것이고, 클라이언트를 위해 새로운 소켓을 생성할것입니다.

PHP manual에 보면 (http://www.php.net/socket_create): AF_INET는 IPV4 프로토콜의 도메인 타입입니다.
참고: 만약 UDP 소켓을 열기위해서는, SOCK_STREAM을 지우고 SOCK_DGRAM을 쓰십시오.

        * socket_bind($sock, $address, $port) or die('Could not bind to address')
        소켓을 입력된 주소와 포트에 결합합니다.

        * socket_listen($sock)
        저장된 포트번호에서, 들어오는 연결을 대기합니다. 만약 연결되면, 자식 소켓을 생성할 것이다.

        * $cliend = socket_accept($sock)
        마스터 소켓에서 접속을 받아들인다.

        * $input = socket_read($client, 1024)
        받아들인 소켓에서 1024 바이트를 읽는다,
       
        * $output = ereg_replace("[\t\n\r]","",$input).chr(0)
        정규식을 사용하여 모든 공백 문자를 제거한다.
       
        *socket_write($client, $output)
        스트림 소켓으로 테이터를 전송한다.
       

2.2 실제 서버 제작하기

지금 여러분은 소켓을 설정하고 대기하기 위해 필요한 기본 절차를 배웠습니다.
여러분은 쓸모있는 서버를 만들 준비가 되어있습니다.

위에 있는 소스코드를 보면, 이 프로그램은 단 한번 실행되고 종료됩니다.
그것은 소켓서버를 생성하기위해 요구되는 단계를 설명하기에는 좋습니다.
그러나 그것은 현실 상황에서는 적합하지 않다.
여러분의 프로그램이 실행 되고, 들어오는 요청에 응답하자마다. 프로그램이 종료되기를 원치않을 것입니다.
다시말하면, 계속 실행되야만 한다.

우리는 그러므로 프로그램은 계속 실행하기 위한 방법이 필요합니다.

우리가 명확히 exit 문을 명령할때까지, 우리는 while(true) { /* 놀지말고 일 좀 해라 */ } 이렇게 반복문을 계속적으로 사용할수 있습니다.
우리는 위의 예를 다음과 같은 기능을 추가하여 확장할 것입니다.

        *  끝없이 프로그램을 실행하게한다.
        * 종료 기능을 만든다.
        * 여러명이 접속해도 처리할수 있도록 한다.

#!/usr/local/bin/php -q
<?

// 끝없이 실행하기 위해 시간 한계를 0으로 설정한다
set_time_limit (0);

// 서버가 대기할 ip 주소와 port 번호를 설정한다.
$address = '192.168.0.100';
$port = 9000;
// 동시에 접속할 수 있는 사용자를 10명으로 한정한다.
$max_clients = 10;

// 클라이언드 정보를 얻을 배열
// 다시 말하자면, 사용자가 10명을 동시에 받아들이겠다면,
// 배열 크기를 10개로 잡아야 합니다.
$clients = Array();

// TCP 스트림 소켓 생성
$sock = socket_create(AF_INET, SOCK_STREAM, 0);

// 소켓을 아이피주소/포트에 결합
socket_bind($sock, $address, $port) or die('주소 지정에 실패했습니다.');

// 연결을 대기를 시작한다.
socket_listen($sock);

// 무한 루프 실행
while (true) {
    // 읽기위해 클라이언트 대기 소켓을 설정한다
    $read[0] = $sock;
    for ($i = 0; $i < $max_clients; $i++)
    {
        if ($client[$i]['sock']  != null)
            $read[$i + 1] = $client[$i]['sock'] ;
    }
    // socket_select()에 블럭킹 호출을 설정한다.
    $ready = socket_select($read,null,null,null);

    /* 만약 새로운 접속이 되면, 그것을 클라이언트 배열에 추가한다 */
    if (in_array($sock, $read)) {
        for ($i = 0; $i < $max_clients; $i++)
        {
            if ($client[$i]['sock'] == null) {
                $client[$i]['sock'] = socket_accept($sock);
                break;
            }
            elseif ($i == $max_clients - 1)
                print ("너무 많은 사용자")
        }
        if (--$ready <= 0)
            continue;
    } // 조건문 if in_array의 끝
    
    // 만약 클라이언트가 쓰기를 시도하면, 바로 그것을 처리한다
    for ($i = 0; $i < $max_clients; $i++) // for each client
    {
        if (in_array($client[$i]['sock'] , $read))
        { // 사용자로부터 입력을 받아서..
            $input = socket_read($client[$i]['sock'] , 1024);
        // 만약 입력이 없으면...
            if ($input == null) {
                // Zero length string meaning disconnected
                unset($client[$i]);
            }
            $n = trim($input);
        // 만약 클라이언트가 'exit'를 입력하면,
            if ($input == 'exit') {
             // 요청에 따라 연결을 종료한다
                socket_close($client[$i]['sock']);
                                // 만약 아니면...
            } elseif ($input) {
             // 공백문자를 제거하고,
                $output = ereg_replace("[ \t\n\r]","",$input).chr(0);
                // 사용에게 소켓 스트림을 통하여 문자열을 보낸다.
                socket_write($client[$i]['sock'],$output);
            }
        } else {
            // 소켓 종료
            socket_close($client[$i]['sock']);
            unset($client[$i]);
        }
    }
} // while문 끝
// 주인 소켓 종료
socket_close($sock);
?>

기본 기능은 처음 예제와 같다. 다만 추가된 특징은 사용자가 문자열 'exit'를 프로그램에 보내면,
프로그램은 연결을 끝낼것이다.

이 프로그램은 반복문을 제외하고, 처음 프로그램과 매우 비슷하다.
소스는 4개의  기본 블럭이 있다.

        1 읽기위해 소켓 설정
        2 새로운 클라이언트를 대기하고 $client 배열로 그것을 설정한다.
         3 클라이언트 대기하고 입력을 기록한다.
        4 클라이언트 입력을 처리한다.

이 예에서, 새 함수는 socket_select($read, null, null, null)입니다.
이 함수는 소켓 배열에서 select() 시스템 호출을 실행하고 상태가 바뀔때까지 기다립니다.
이것은 그 상태가 바뀔때까지 막고 있다가, 누군가 접속하여 그 상태가 바뀌면 그것을 처리합니다.

마지막 요점으로, 여러분은 연결된 다른 클라이언드에 정보를 뿌리고 싶을때(예를 들면 다-대-다 채팅 환경을 말한다)를 알아낼 수있습니다.
이것은 다음과 같은 코드로 저장될수 있다.
<PRE>
$output = '이것은 제가 여러명에게 보내고 싶은 메시지입니다'.chr(0);
for ($j = 0; $j < MAX_CLIENTS; $j++) // 각각의 클라이언트
{
    if ($client[$j]['sock']) {
        socket_write($client[$j]['sock'], $output);
    }
}

원문에서 broadcast라는 말이 나오는데 우리 말로는 '방송'으로 번역하고, &nbsp;
여기서는 한번에 여러명에게 정보를 보내는 것을 애기합니다. 다르게 애기하면 '대량 살포' 이런 의미입니다.

socket_select()함수 역시 중요한데. 부가 설명을 하자면,
select라는 말처럼 기다리고 있다가, 튀는 놈, 예를 들면 사용자가 접속하면, 그 놈을 선택(select)하여
넘겨주면 그걸 처리해주는 것입니다.

2.3 실용적인 사용

지금 우리는 소켓 서버 생성의 기초를 배웠다. 만약 한계가 있다면, 우리의 상상력입니다.

        *  채팅 서버(텍스트 또는 그래픽 기반). 이것은 재미있으면서 진짜 어플리케이션이 될 수 있습니다.
        *  실시간 정보 스트리밍 (뉴스, 주식..기타등등)
        *  스트리밍 멀티미디어 (이미지, 동영상과 사운드)
        *  인증 서버
        *  간단한 웹, POP3, SMTP 그리고 FTP 서버.

좀더 자세하게 말하자면, 소켓 라이브러리는 서버와 마찬가지로 클라이언트 프로그램을 만들 수 있다.

2.4 보안

보안은 접근 가능한 온라인 프로그램 생성할때 고려되어야 한다.
이것은  계속 실행되는 서버 소켓과같이 일반적인 PHP 스크립트에도 해당됩니다.

여러분이 보안 정책을 계획할때, 고려하는 많은 사실이 있다. 여기 몇가지 나열하겠다.


        * 파일 접근 - 여러분은 파일 접근을 제한해야한다. 만약 웹서버같은 것이 파일 접근을 허락하면
        , 여러분은 특정 폴더에서 파일에 접근하게 해야한다. 다른 좋은 개념은
       
        * 인증 - 보안에 약한 서버를 위해, 여러분은 인증을 사용하기를 추천한다. 여러분이
        플래시나, 비주얼 베이직으로 사용자 프론트-엔드를 만들더라도, 그것은 신뢰성이 없습니다.
        누군가 네트워크 접속과 "sniff"할수 없을 것이다.

인증을 하기 위한 한가지 좋은 방법으로, 사용자가 성공적으로 스스로 인증하기 전까지 어떤 시도도 허락하지 않는 것이다.
(위에서 예를 들면 인증 하자마자, $client[$i]['authenticated'] = true )
       
        * 암호화 - 암호화는 중요한 정보를 막기위한 대단히 좋은 방법입니다. 암호화는 특히 위에 애기한 인증과 함께 사용하면
대단히  유용합니다. 운이 좋게도 PHP는 뛰어난 암호화 라이브러리를 제공합니다.
자세한 내용은 (http://www.php.net/mcrypt)

3. 가능한 기능 추가와 확장
        * PCNTL을 사용하여 프로세스 제어와 쓰레드를 추가한다.
         * 프론트-앤드 인터페이스(다시 말해 GUI 화면)는 C++, VB, Flash (XMLSockets를 사용), 자바 또는 TCP/IP 또는 UDP 소켓을 지원하는 모든 소프트 웨어를 사용하려 작성할 수 있다.
        * 만약 서버가  시험삼아 돌아가게되면, 당신은 모니터에 에러 메시지에 출력하는 대신 텍스트 화일이나 데이터 베이스 기록되는 사용자 에러 핸들링 함수를 생성을 원할것이다.

글쓴 이에 대해
집에서 놀고 있는 백수.
PHP 함수정리

1. 날짜 및 시간 관련함수

*time()
-용도: 현재 시각을 timestamp값으로 구한다.
-방법: time()

*date()
-용도: 사용자가 지정한 형태로 시간을 표시. 특정시간의 날짜와 요일등을 배열로 리턴한다.
-방법: date("표시할 시간의 포맷형태","특정한 timestamp값")

*mktime()
-용도: 지정된 날짜를 timestamp값으로 변환한다.
-방법: mktime(시,분,초,월,일,년)

*checkdate()
-용도: 날짜와 시간이 올바른 범위 안에 있는지 검사한다.
-방법: checkdate(월,일,년)

*getdate()
-용도: 특정timestamp값으로 시간,요일,날짜정보를 배열로 반환한다.
-방법: getdate(timestamp값) 또는 getdate()

*gettimeofday()
-용도: 현재 시스템의 현재 시간 정보를 배열로 리턴한다.
-방법: gettimeofday()

*gmmktime()
-용도: 그리니치표준 시간으로 지정한 날짜의 timestamp값을 리턴한다.
-방법: gmmktime(시,분,초,월,일,년)

*strftime()
-용도: 특정한 포맷으로 날짜 정보를 출력하는데 언어를 지정할수 있다.
-방법: strftime("표시할 시간의 포맷형태","특정시간의 timestamp값")

*microtime()
-용도: 현재시간의 마이크로타임 값과 timestamp값을 표시한다.
-방법: microtime()

*localtime()
-용도: 현재 서버의 로컬 타임을 표시
-방법: localtime() 또는 localtime("timestamp값")

2. 문자열 처리함수

*addslashes()
-용도: 작은따옴표 큰따옴표와 같은 특정문자 앞에 역슬래시 문자를 붙인다.
-방법: addslashes()

*stripslashes()
-용도: allslashes로 역슬래시 처리된 문자를 원상태로 되돌린다.
-방법: stripslashes()

*htmlspecialchars()
-용도: HTML코드를 소스 그대로 출력해준다.
-방법: htmlspecialchars()

*nl2br()
-용도: 문자열에 포함된 개행 문자를 <br>태그로 모두 바꿔준다.
-방법: nl2br()

*echo()
-용도: 문자열 출력
-방법: echo("변수명" 또는 "문자열")

*sprintf()
-용도: 포맷 문자열을 통해 지정해 준 포맷으로 문자열을 표시한다.
-방법: sprintf("포맷","변수명")

*printf()
-용도: 지정할 수 있는 포맷에 따라 문자열을 출력한다.
-방법: printf("포맷","변수명")

*explode()
-용도: 문자열을 지정해준 구분자로 분리하여 배열에 저장한다.
-방법: explode("구분자","문자열인수")

*implode()
-용도: 구분자로 나누어 배열에 담은 문자열을 다시 지정해준 구분자로 연결하여 전체 문자열을 반환한다.
-방법: implode("구분자",배열변수명)

*join()
-용도: implode()와 동일한 기능을 수행한다.
-방법: join("/", "배열변수명")

*split()
-용도: 주어진 문자열을 정규표현식의 패턴에 따라 분리하여 배열에 저장한다.
-방법: implode("정규표현식","문자열")

*strcmp()
-용도: 두개의 문자열을 비교하여 참이면1, 거짓이면 0을 반환한다.
-방법: strcmp("문자열","문자열") 또는 strcmp("문자열","변수명") 또는 strcmp(변수명, 변수명)

*substr()
-용도: 문자열에서 특정시작 문자부터 길이만큼의 문자열을 추출하여 반환한다.
-방법: substr("문자열", 시작문자번호, 문자열의 길이)

*strchr()
-용도: 문자열이 처음으로 나타나는 위치부터 끝까지 반환
-방법: strchr("문자열","찾을 문자열")

*strstr()
-용도:strchr()함수와 동일한 수행을 한다.
-방법: strstr("문자열","찾을 문자열")

*strrchr()
-용도: 문자열이 마지막으로 나타나는 위치부터 끝까지 반환한다.
-방법: strrchr("문자열","찾을문자열")

*strpos()
-용도: 문자열 대신 처음으로 나타나는 위치를 숫자로 반환, 이때 숫자는 0부터 시작.
-방법: strpos("문자열","찾을 문자열")

*strrpos()
-용도: 찾고자 하는 문자열에서 마지막으로 나타나는 위치를 반환한다.
-방법: strrpos("문자열", "찾을 문자열")

*strlen()
-용도: 문자열의 길이를 반환한다.
-방법: strlen($변수명) 또는 strlen("문자열")

*strtolower()
-용도: 알파벳 대문자를 모두 소문자로 바꾸어 반환한다.
-방법: strtolower("문자열")

*strtoupper()
-용도: 알파벳 대문자를 소문자로 바꾸어 반환한다.
-방법: strtoupper("문자열")

*ucfirst()
-용도: 알파벳 문자열의 첫 글자를 대문자로 반환한다.
-방법: unfirst("문자열")

*ucwords()
-용도: 알파벳 문자열의 첫 글자를 대문자로 반환한다.
-방법: ucwords("문자열")

*strrev()
-용도: 인자로 전달한 문자열의 순서를 역전시킨다.
-방법: strrev("문자열")

*strtr()
-용도: 문자열에서 변경하고자 하는 문자열을 변경할문자열로 1:1 변경해준다.
-방법: strtr("문자열","변경하고자하는 문자열","변경할 문자열")

*str_replace
-용도: 문자열 중에 변경하고자 하는 문자열을 찾아 변환한다.
-방법: str_replace("찾을 문자열","변경할 문자열","문자열 원본")

*chop()
-용도: 문자열의 뒷부분의 공백 문자를 제거한 후 반환한다.
-방법: chop("문자열")

*trim()
-용도: 문자열의 앞과 뒤에 있는 공백을 제거한 후 문자열을 반환한다.
-방법: trim("문자열")

*quotemeta()
-용도: 메타문자 앞에 역슬래시를 붙인다.
-방법: quotemeta()

*ord/chr()
-용도: ord()함수는 문자열에서 첫번째 문자에 아스키코드값을 반환하고 chr()함수는 아스키함수에 해당하는 문자를 반환한다.
-방법: ord("문자열"), chr("아스키값")

*parse_str()
-용도: get방식과 같은 형태의 변수형을 변수와 값으로 받을 수 있게 해준다.
-방법: parse_str(변수명)

3.파일관련함수

*fopen()
-용도: 로컬경로의 파일이나 url경로의 파일을 읽기 모드나 쓰기 모드로 열어준다.
-방법: fopen("절대경로명/파일", "모드")또는 fopen("url주소", "모드")

*fclose()
-용도: fopen으로 열린 파일을 닫는다.
-방법: fclose($fp)

*fread()
-용도: 파일포인터가 가리키는 파일의 내용을 지정한 크기만큼 읽어 들인다.
-방법:fread($fp,"읽어들일 바이트")

*feof()
-용도: 현재 파일 포인터가 파일의 끝인지를 알려주는 함수
-방법: feof($fp)

*fgets()
-용도: 파일을 읽어올때 한줄씩 읽어온다.
-방법: fgets($fp,"읽어들일 바이트")

*fputs()
-용도: 파일을 a 또는 w 모드로 열어 문자열을 파일에 기록한다.
-방법: fputs($fp, "문자열")

*fwirte()
-용도: 파일을 기록한다.
-방법: fwrite($fp, "문자열")

*fpassthru()
-용도: 파일포인터의 현재 위치에서 파일의 끝까지 읽어 들이도록 한다.
-방법: fpassthru($fp)

*readfile()
-용도: fpassthru와 비슷하지만 fopen()없이 직접 바로 파일을 읽어들일 수 있다. 읽어들인 파일의 절대경로를 포함한다.
-방법: readfile("파일의 절대경로 또는 상대경로/파일명")

*fgetc()
-용도: 파일로부터 한문자를 읽어들인다.
-방법: fgetc($fp)

*filesize()
-용도: 파일의 크기를 바이트수로 반환한다.
-방법: filesize("파일경로/파일명")

*file_exists()
-용도: 파일이름으로 지정한 파일이 존재하는지 검사한다.
-방법: file_exists("파일경로/파일명")

*is_file()
-용도: 파일이름으로 지정한 이름이 파일면 true를 반환한다.
-방법: is_file("파일경로/파일명")

*is_dir()
-용도: 파일이름으로 지정한 이름이 디렉토리일경우 true를 반환한다.
-방법: is_dir("파일경로/파일명")

*is_link()
-용도: 파일이름으로 지정한 이름이 심볼릭 링크일경우 true를 반환한다.
-방법: is_link("파일경로/파일명")

*is_escutable()
-용도: 파일이름으로 지정한 파일이 실행 가능한 파일이면 true를 반환한다.
-방법: is_excutable("파일경로/파일명")

*is_readable()
-용도: 파일이름으로 지정한 파일이나 디렉토리가 읽기 가능한경우 true를 반환한다
-방법: is_readable("파일경로/파일명 또는 디렉토리명")

*is_writeable()
-용도: 파일이름으로 지정한 파일이나 디렉토리가 쓰기 가능한 경우 true를 반환한다
-방법: is_writeable("파일경로/파일명 또는 디렉토리명")

*copy()
-용도: 파일을 복사하고 제대로 수행이 되면 true를 반환한다.
-방법: copy("파일경로/복사할 파일명", "파일경로/복사된 파일명")

*rename()
-용도: 파일을 이름을 바꾼다. 제대로 수행이 되면 true를 반환한다.
-방법: rename("파일경로/변경할 파일명", "파일경로/변경후 파일명")

*unlink()
-용도: 파일을 삭제한다. 제대로 수행될 경우 true를 반환한다.
-방법: unlink("파일경로/삭제할 파일명")

*mkdir()
-용도: 디렉토리를 생상하고 동시에 권한도 함께 지정할 수 있다.
-방법: mkdir("경로/디렉토리명")

*rmdir()
-용도: 디렉토리 삭제
-방법: rmdir("경로/디렉토리명")

*basename()
-용도: 경로명과 파일명을 받아 파일명만을 반환한다.
-방법: basename("파일경로/파일명")

*dirname()
-용도: 경로명과 파일명을 받아 경로명만을 반환한다.
-방법: dirname("파일경로/파일명")

*file()
-용도: 줄단위로 읽어서 각 줄으 문자열을 배열로 하여 반환한다.
-방법: dirname("파일경로/파일명")

4.디렉토리 관련함수

*opendir()
-용도: 지정한 디렉토리에 대한 핸들을 얻는다.
-방법: opendir("디렉토리 경로")

*closedir()
-용도: opendir()함수 호출로 열어둔 디렉토리에 대한 핸들을 닫는다.
-방법: closedir($od)

*readdir()
-용도: 디렉토리에 있는 모든 디렉토리 및 파일들의 이름을 읽어 배열의 형태로 반환
-방법: readdir($od)

*rewinddir()
-용도: 디렉토리 핸들의 포인터 위치를 제일 처음으로 되돌린다.
-방법: rewinddir($od)

*chdir()
-용도: 지저한 디렉토리로 바꾼다.
-방법: chdir("경로명/디렉토리명")

*dir()
-용도: 디렉토리 관련 함수를 사용할 수 있는 클래스
-방법: dir("경로/디렉토리명")

5. URL관련함수

*parse_url()
-용도: url을 입력하면 해당 url에 대한 정보를 연관 배열로 저장하여 반환
-방법: parse_url("URL주소")

*urlencode()
-용도: 데이터를 url인코딩해준다.
-방법: urlencode("문자열")

*urldecode()
-용도: url을 통해 넘어온 값 중 인코딩된 문자열을 디코딩한다.
-방법: urldecode("문자열")

6.변수 및 수학 관련함수

*gettype()
-용도: 변수형을 반환한다.
-방법: gettype("변수명")

*settype()
-용도: 변수형을 변환한다.
-방법: settype("변수명", "변수타입")

*intval()
-용도: 변수값을 정수형 값으로 변환
-방법: intval("변수값")

*doubleval()
-용도: 변수값을 실수형 값으로 변환한다.
-방법: doubleval("변수값")

*strval()
-용도: 변수를 문자형 값으로 변환한다.
-방법: strval("변수값")

*isset()
-용도: 변수가 존재하는지 확인한다.
-방법: isset("변수명")

*unset()
-용도: 변수를 삭제한다.
-방법: unset("변수명")

*empty()
-용도: 변수에 값이 존재하는지 확인하여 없으면 true를 있으면 false를 반환한다.
-방법: empty("변수명")

*is_array()
-용도: 변수의 형이 배열인지 확인한다.
-방법: is_array("변수명")

*is_double
-용도: 변수의 형이 더블형인지 확인한다.
-방법: is_double("변수명")

*abs()
-용도: 변수의 절대값을 반환
-방법: abs("변수명")

*round()
-용도: 변수의 반올림한 값을 구한다.
-방법: round("변수명")

*ceil()
-용도: 변수 값의 무조건 올림 값을 구한다.
-방법: ceil("변수명")

*floor()
-용도: 변수값의 무조건 내림 값을 구한다.
-방법: floor("변수명")

*pow()
-용도: 인자 값만큼 제곱승 한 값을 구한다.
-방법: pow("변수명", "제곱할 횟수")

*max & min()
-용도: 최대값과 최소값을 구한다.
-방법: max("숫자값", "숫자값",...) min("숫자값", "숫자값",...)

7.기타 알아두어야 할 함수

*count()/sizeof()
-용도: 배열의 크기를 구한다.
-방법: count("변수명") sizeof("변수명")

*each()/list()
-용도: 배열의 내용을 출력할때 사용한다.
-방법: each("배열변수명"), list("배열의 인자를 받을 변수명", "배열의 인자를 받을 변수명"...)

*end()/next()/reset()
-용도: 현재 배열의 포인터를 끝이나 다음으로 이동시킨다. reset은 배열포인터를 다시 처음으로 되돌린다.
-방법: end("배열변수명") next("배열변수명")

*exec()
-용도: 리눅스 서버의 내부 명령어를 사용하게 한다.
-방법: exec("리눅스명령어", "결과를 저장할 변수명" ,"에러발생시 저장할 변수명")

*number_format()
-용도: 천단위마다 ","를 붙여준다.
-방법: number_format("변수명", "소수점자리수", "소수점 표시마크변경", "천단위 표시 마크변경")

*show_source() / highlight_string()
-용도: php파일의 소스를 보여준다.
-방법: show_source("경로명/파일명") highlight_string("변수명")

*uniqid()
-용도: 유일한 아이디 값을 만들어준다
-방법: uniqid()
★ 무조건 알아야 할 PHP 속도 테스트 14 가지 ◆◇◆◇◆◇      


PHP로 코딩 함에 있어서 알아야 할 속도 테스트 입니다.
조금더 빠른 PHP 속도를 유지 하기 위한 것이죠 ^^

작은 것이 모여서, 대따 오랜 시간이 걸릴 수 가 있는 것 입니다. !!
되도록이면 속도가 빠른 것을 사용하시는 것이 좋습니다.

물론 함수 마다 기능 마다 장단이 있지만요....^^


다른 비교가 있으면 알려주셍 ^^ 답변 달아 주세용 ^^

계속 적으로 업글 됩니다. 현재 14가지 !!!!


==========================================================================
★ mysql 총 게시물 수 세기

$numresults=mysql_query("select code from $board");
$numrows=mysql_num_rows($numresults);
2초 이상 ...게시물 10만개

VS

$numresults=mysql_query("select count(code) as code from $board");
$row_num=mysql_fetch_array($numresults);
$numrows=$row_num[code];
0.2  ...게시물 10만개

아래것이 훠얼씬 빠름다..
도대체 mysql_num_row() 는 왜 만들어 놓은 것일까용???


==========================================================================
★ mysql_fetch_row  > mysql_fetch_array >>> mysql_result


입니다.

row 가 array 보다 약간 빠르고, result 보다는 훠얼씬 빠름당 ^^

row 는 불편한게 숫자로 칼럼을 불러와서 불편합니다.
array 가 약간 느리지만, 문자 칼럼을 불러 올 수 있으니 array 쓰는 것도 양호 ^^

아직도 mysql_result() 를 사용하시나요?

==========================================================================
★print , echo ,printf 함수 속도 비교
HTML 출력 >> echo > print >> printf


print 와 printf 함수는 복잡한곳에 적격이고, 약간 느리다.

echo 는 단순한곳에 적격이고...빠르다.
printf 는 형식화된 출력을 해주므로 그래도 좋죠 ^^

==========================================================================
★  인라인

 a.php
<?
$aa="sdsdsdsd";
echo ("<table>
 <td> $aa </td>
</table>");
?>

 위 랑..

 b.php
<? $aa="sdsdsdsd"; ?>
<table>
<td><? echo $aa; ?></td>
</table>

 랑 도대체 어케 코딩 하느냐죠 ?

솔직히 코딩은 a.php 가 편합니다.
<? ?> 를 한번 만 쓰니까 효율적일 수 있습니당..

그러나 아무리 아무리 PHP가 빠르다고 해도 HTML 이 더 빠릅니당.. !!!

쿠쿠쿠

b.php 처럼 코딩 하는 습관을 가지세용 ^^

==========================================================================
★ zend cache , APC ,Bware 캐쉬 비교
Zend cache > APC > Bware

zend cache 는 캐쉬 입니다. 울나라에서 포탈에서도 몇군데 사용하죠.
PHP 프로그램 변환 없이 속도를 빠르게 해 줍니다. ^^

zend cache 를 살 돈이 없으시다구용?
그러면 APC 나 zend optimizer 를 반드쉬 설치 하세용 !!

■ 그런디 Zend Cache 만한 무료 캐쉬가 나왔다고 합니당...^^
http://www.php -accelerator.co.uk/index.php ;


==========================================================================
★ ereg_replace , preg_replace 정규표현식
ereg_replace () 가 장난 아니게 느림다.
40개 정도 변환 하는데 1초나 걸려요.preg_replace 는 0.3초 정도요.

되도록이면 preg_replace() 를 사용하세요 !!!

www.php.net/preg_replace


==========================================================================
★ foreach , list 함수 속도 차이 35%

foreach($string as $a);  >>>  while(list(,$a) = each($string));

foreach() 를 사용하는 것이 35% 정도 빠릅니다...!!


==========================================================================
★mysql_connect Vs mysql_pconnect

서로 장단이 있다 합니다.

mysql_pconnect 가 더 빠르다고 합니다.
persistant

메뉴얼에 영구적인 이렇게 되어 있으니까요..
일정시간 동안 mysql 을 열어 놓기 때문에, 다시 열 필요가 없어서 빠르다고 합니다.

단점은 계속 열기 때문에 메모리를 많이 잡아 먹슴당...^^
mysql_pconnect 경우는 최소 메모리가 1G 이상 되어야 사용하시는 것이 좋습니다.

==========================================================================
★ 큰따옴표(") , 작은 따옴표(')

큰따옴표는 PHP가 파싱을 합니다. 그러나 작은 따옴표는 파싱을 하지 않습니다.
작은 따옴표를 사용하시는 것이 빠릅니다.

코딩시 echo ' test '.$aaa.' tood ';
요런식으로 하시는 게 가장 빠름당 !!

==========================================================================
★ mysql 데이터 저장 공간 크기 ?


id int(11) unsigned NOT NULL auto_increment,
   bbs smallint(5) unsigned NOT NULL,
   lens mediumint(8) unsigned NOT NULL,
 

int 도 무자게 많슴당..
각각의 크기에 맞게 하는 것이 속도가 빨라 집니당 ^^

not null 를 주는 것도 속도가 빨라 집니당..

작은 사이트 조회수 경우 1만을 넘기도 힘듭니다. 그럴 경우 smallint 를 사용하시면 됩니다.

==========================================================================
★ where 절에 모든 것은 인덱스를 걸어라 !!!
mysql 에서 쿼리시에 where 절에 사용되는 비교의 칼럼은 반드쉬 인덱스를 거세용 !!!

mysql 인덱스 가 여러 분들의 게시판 속도를 업 시켜 줍니당 !!


==========================================================================
★메인페이지에서 속도를 빠르게 하려면, .htm 으로 만드는 것이 좋습니다.

그러니까..제 사이트 페이지 오른쪽 에는 모두 최신 게시물로 디비를 불러오는 부분
입니다.

디비 연결은 부하를 줄 수 있습니다.

그러니까..이예는 사이트가 상당히 활성화된 사이트일 경우 입니다.

하루에 2번 정도 .htm 으로 만들어 페이지를 업시키는 것이 좋습니다.
아무리 PHP가 빨라도 HTML 보다는 빠르지 않습니다.. !!!

그러기 위해서는 ★cron 를 알아야 합니다 PHP강좌 게시판에서 cron 으로 검색하세용 !!
윈도우 사용자는 멀 쓰는지 잘 모르겠슴당...아시면 답글 부탁  ^^


==========================================================================
★ 초보자 Vs 전문가

www.zend.com 에서 제가 2000년 5월에 퍼온건데용 ^^  
함 주석을 붙일까 해서용^^


Beginner vs Experienced  
Author:  Boaz Yahav  
Date  23/05/2000  

Beginner : echo "$var";  
Experienced : echo $var;  


Beginner:echo "<a href=\" http://www.php.net\">PHP</a>";  ;
Experienced : ?><a href=" http://www.php.net">PHP</a><?  ... ?>  ;

◆ "(따옴표) 가 굉장히 중요한것이라는 한 대목이죵 ^^
전 보통의 경우 php 변수 값이 들어갈 경우는 초보자 처럼 쓰구요 ^^ 안들어 갈 경우 는 전문가 처럼 씀다.

Beginner : $a[0]=1; $a[1]=2; $a[2]=3;  
Experienced : $a = array(1,2,3, 1);  
둘다 사용하는 데요. 전문가 쪽이 편함다. ^^

Beginner : if($a>1) { $b=2; } else { $b=3; } 
Experienced : $b = ($a>1) ? 2:3;  
요건 완존히 소스 어렵게 짜는 넘이 최고 라는 소리 같네용 ^^
전문가 쪽것은 C 언어 에서 배웠는데도 역시 전 if 씀다. ^^

Beginner : $result=mysql_query(...);  
Experienced: $result=mysql_query(...) OR die  
        (mysql_error());  

요즘 들어 새삼 전문가 쪽으로 씀다.^^
보통의 경우

$result=mysql_query(...)  
if (!$result)
{
 echo error()."<P>";
 echo errno();
}
이렇게 사용함다. ^^

or 이 설명이고 no 가 에러 번호 일 검다. ^^

==========================================================================
★MySQL,ADODB,PHPLib,PEAR 벤치마킹  

ADODB > PHPlib > PEAR
 
MySQL     1.14      -
ADODB     1.45     27%
PHPLib    1.60     40%
PEAR     2.87     152% (fetchInto)

MySQL,ADODB,PHPLib,PEAR  는 모두 데이터베이스 인가요? 당근 아닙니다.
MySQL만 데이터베이스 구요.
ADODB,PHPLib,PEAR 는 PHP 프로그램 입니다.

3개 다 MySQL연결을 편하게 하는 클래스 프로그램 입니다.
그런디 벤치 마킹 결과 MySQL 에서 직접 쿼리하는 것 다음으로 ADODB 가 뽑혔슴당 ^^

PEAR 가 굉장히 늦군요. PEAR DB 나 ADODB 를 사용해 보았는데, 움..역시나 ADODB 가 좋군요.
오라클, mysql , ms sql 연결시 1개의 API 만 사용할 수 있는 프로그램 들 이 PEAR 과 ADODB 입니당 ^^
==========================================================================
★ 속도 테스트는 어케 하는가 ? microtime() 사용하면 됩니다.


<?

function pageTime($page) {
 $mstart = explode(" ", $m);
 $mend = explode(" ", microtime());
 $mtime = ($mend[1] - $mstart[1]) + ($mend[0] - $mstart[0]);

 echo " $m[1]  $mend[1]<P>";
 echo " $m[0]  $mend[0]<P>";

 print("tood.net 페이지 로딩 시간 : " . $mtime . " microseconds");
}
pageTime(basename($PHP_SELF));
?>
 


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


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

참고 사이트
http://www.tood.net
http://www.zend.com
http://www.php.net
http://www.php.lt/benchmark/phpbench.php
http://www.phpbuilder.com
http://www.phpbuilder.com/columns/piergiorgio20010321.php3?print_mode=1
<?
  /*
    ** 추상 클래스 **

    상위 클래스에서 메소드(껍데기)만 구현하고, 하위 클래스에서 그 메소드를
    구현해야 한다.

    CSpeak 클래스에서 speak()라는 추상 메소드를 구현 했으며, 하위 클래스의
    CKor, CEng에서 각각 실제 기능이 있는 speak() 메소드를 구현 하였다.
  */
  abstract class CSpeak
  {
    abstract public function speak();
   
    public function write()
    {
      $this->speak();
    }
    public function __set($name, $value) { $this->{$name}=$value; }
    public function __get($name) { return $this->{$name}; }
  }

  class CKor extends CSpeak
  {
    public function speak()
    {
      echo "한국어를 하다.<br>";
    }
  }

  class CEng extends CSpeak
  {
    public function speak()
    {
      echo "영어를 하다.<br>";
    }
  }
  /*
  class CJpn extends CSpeak
  {
    // 추상 메소드를 구현하지 않았기 때문에 에러가 난다.
  }
  */


  $kor = new CKor();
  $eng = new CEng();

  $kor->write();
  $eng->write();
?>

결과 :
한국어를 하다.
영어를 하다.

HTML에서 벗어나기

PHP 파일을 해석할때 PHP코드로 해석하라고 하는 특별한 코드와 만나지 않는다면 단순히 파일의 텍스트를 넘겨줄 뿐이다. 해석기(parser) PHP 닫기 태그가 있는곳까지 발견된 코드 모두를 수행한다. PHP 닫기 태그 만나면 다시 텍스트를 그냥 넘겨주기 시작하는것이다. 이런 메카니즘은 HTML안에 PHP코드를 내장시킬수 있게 해준다: PHP 태그 밖의 모든것은 완전히 단독으로 존재하는것이고, 반면에 PHP 태그 안쪽은 코드로서 해석이 된다.

PHP 코드 블록은 네가지의 태그형태로 표시할수 있다. 중에서 두가지 (<?php. . .?> <script language="php">. . .</script>) 항상 유효한 형태이다. 반면에 다른 형태는 php.ini 설정 파일에서 켜거나 있다. 짧은형(short-form)태그와 ASP스타일(ASP-style) 태그는 편하겠지만, 형태 태그만큼 이식성이 뛰어나진 못하다. XML이나 XHTML안에 PHP코드를 내장시키려면 XML 호환될수 있도록 <?php. . .?>형을 써야한다.


PHP 에서 MSSQL 접속하는 방법 (셋팅방법, 윈도우 XP)
기본적으로 윈도우에 APM 설치및 사용이 가능하다는 전제로 설명하겠습니다.

참고로 제 컴퓨터 사양은 아래와 같습니다.

윈도우 XP 프로페셔널 SP3
아파치, MySQL, PHP (Ver 5.x)

PHP 에서만 셋팅을 해주면 MSSQL 접속이 가능합니다.
php.ini 파일에서 'mssql' 이라고 검색해보시면 아래와 같은 부분이 나옵니다.

;extension=php_msql.dll
;extension=php_mssql.dll
extension=php_mysql.dll

위에서 mssql 부분의 ; 표시를 지워버립니다. 아래처럼요

;extension=php_msql.dll
extension=php_mssql.dll
extension=php_mysql.dll

그리고 PHP 설치한 폴더 안에 보시면 ntwdblib.dll 파일이 있는데 이 파일을 윈도우 하위 폴더인 system32 에 넣습니다.
c:\windows\system32
여기가 되겠죠..

그럼 셋팅은 끝났습니다.
이제 아파치를 다시 재시동 하고 테스트에 들어갑니다.

<?
$myServer = "MSSQL 서버주소";
$myUser = "유저아이디";
$myPass = "유저비번";
$myDB = "DB이름";

$db = mssql_connect($myServer, $myUser, $myPass) or die ("서버 연결 실패");
mssql_select_db($myDB,$db) or die ("DB 연결 실패");
?>

위의 테스트에서 에러가 발생하지 않았다면 성공한겁니다.

참고로 MSSQL 서버 포트가 별도로 지정된 경우 쉽게 생각하는건 서버주소:포트번호 라고 생각하지만 MSSQL 서버는 다릅니다.

서버주소:포트번호 X
서버주소,포트번호 O

쉼표로 해줘야 되요.. ^^

사용자 삽입 이미지

<?

 /***************************************************
   그림에 텍스트 입력하기
 ***************************************************/

 $fontname = "MALGUN.TTF"; // php 파일과 같은 디렉토리거나, 경로까지 설정해야함
    $width = "500";
    $height = "500";

 function euckr2utf8($text) {
  return stripslashes(iconv("EUC-KR","UTF-8",$text));
 }

    $im1 = imagecreatefromjpeg("jj.jpg");
    $im2 = imagecreatefromjpeg("kim.jpg"); // GIF 파일 로드 : imagecreatefromgif()

    $white = ImageColorAllocate ($im1, 255, 255, 255);// 사용할 색상 설정 
    $black = ImageColorAllocate($im1,0,0,0);  // 사용할 색상 설정

 // 2개의 그림을 합친다.
 ImageCopyMerge ($im1, $im2, 0, 0, 0, 0, imageSX($im2), imageSY($im2), 70);

    ImageTTFText($im1, 20, 0, 5, 128, $black, $fontname, chr((rand() % 26)+65));

 header ("Content-type: image/png");  // 브라우저로 출력할 파일 타입 지정
    ImagePNG($im1); // 브라우저로 출력시킴

  //  ImagePNG($im1, "c:/1.png"); // jpg파일로 출력시킴
    ImageJpeg ($im1,"c:/1.jpg");  // png 파일로 출력시킴

    ImageDestroy($im1); // 이미지에 사용한 메모리 제거
    ImageDestroy($im2);

?>

출처 : http://sugame.tistory.com/234

php-ini-dist 를 php.ini로 수정  
  cod_root 수정  작업디렉토리로..   extension_dir = "C:\php\"

php.ini 와 php4ts.dll 복사해서 winNT , system32 에 붙여넣기..

 apache2\conf\httpd.conf 맨아래에..

LoadModule php4_module "C:/php/sapi/php4apache2.dll"
AddType application/x-httpd-php .php .htm .html

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

1. apache 인스톨 apache를 다운
apache_2.0.54-win32-x86-no_ssl.msi 사용 함
윈도우 위저드 인스톨 방식에 따라 설치 하면됨

2. php 인스톨
php를 다운받는다.
php-4.3.11-Win32.zip 버전을 사용함
binary 형태이기때문에 c:php 디렉토리를 만들어서 이쪽으로 풀어 놓으면된다.

3. 설정
1) php설정
* 압축을 풀어놓은 c:php 디렉토리에 있는 php.ini-dist 메모장으로 열어
extension_dir을 찾아 다음 처럼 작성해 놓고 xp의 운영체제 디렉토리인 c:windows 밑에 php.ini로 복사해 넣는다.
extension_dir = "c:php"

* php4ts.dll 파일을 syatem32 폴더 아래 카피하기

2) httpd.conf 에 다음추가
LoadModule php4_module c:/php/sapi/php4apache2.dll
AddType application/x-httpd-php .php4 .php .html .htm .inc .php3 .phtml

4. 확인
1) 메모장을 열어
위와 같이 작성한 후 info.php로 저장하고 아파치를 리스타트 하여 확인해 본다.

<?

/******************************************************************************

Program: waterMark.php
Description : 서비스 이미지에 워터마크 적용하기
Author      : Ryu Jee Hyoung
CreateDate  : 2007.01.18
CopyRight   : Copyright(c) 청명공자 All Right Reserved.
UpdateDate  :

Todo        :

 워터마크가 적용되도록 이미지 URL 변경
 - 사용법
 > $img_url = http://localhost/images/test.jpg;
 > $img_url = waterMark($img_url);
 > echo $img_url;

******************************************************************************/

function waterMark($image,$thumbW=null,$thumbH=null)
{
  $argTmp = $thumbW."|".$thumbH."|".$image;
  $arg = base64_encode($argTmp);
  $arg = urlencode($arg);

  $img_info = @getImageSize($image);
  if($img_info[2] == 6) {
    $chgURL = $image;
  }
  else {
    $chgURL = "http://localhost/imgView.php?image=$arg";
  }

  return $chgURL;
}

$img_url = http://localhost/images/test.jpg;
$img_url = waterMark($img_url);
echo $img_url;

?>


<?

/******************************************************************************

Program: imgView.php
Description : 서비스 이미지에 워터마크 적용하기
Author      : Ryu Jee Hyoung
CreateDate  : 2007.01.18
CopyRight   : Copyright(c) 청명공자 All Right Reserved.
UpdateDate  :

Todo        :

******************************************************************************/
flush();


# 특정경로에 워터마크 처리할 이미지가 존재해야 함!!
# 워터마크 이미지는 필히 JPG 여야 합니다.

define("WATERMARK", "/home/httpd/html/images/watermark.jpg");


header("Content-type: image/jpeg");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");


$photoTmp = base64_decode($image);
$photo = $photoTmp; # waterMarkImage($arg) 이런 형식(w,h가 지정이 안된 경우)으로 사용된 것
if (ereg("\|",$photo)) {
  # waterMarkImage($arg,100,50) 이런 형식(w,h가 지정된 경우)으로 사용된 것
  list($w1,$h1,$photo) = explode("|", $photoTmp, 3);
  $thumb_w1 = $w1;
  $thumb_h1 = $h1;
}

$photo = urldecode($photo); # %C24%.... 이런식으로 encode되어 오는 파일오류를 방지

$img_info = getImageSize($photo);
$photo = ereg_replace("%","%25",$photo);
$image_url = urldecode($photo);
if (!@fopen($image_url, "r")) {
  $dst_img = imagecreatefromjpeg(WATERMARK);
  $res = imagejpeg($dst_img, "", 100);
  die();
}

$file = pathinfo($image_url);
if ($img_info[2] == "1") {
  $file["extension"] = "GIF";
}
else if ($img_info[2] == "2") {
  $file["extension"] = "JPG";
}
else if ($img_info[2] == "3") {
  $file["extension"] = "PNG";
}
switch(strtoupper($file["extension"])) {
  case "JPEG":
    $src_img = imagecreatefromjpeg($image_url);
    break;
  case "JPG":
    $src_img = imagecreatefromjpeg($image_url);
    break;
  case "GIF":
    $src_img = imagecreatefromgif($image_url);
    break;
  case "PNG":
    $src_img = imagecreatefrompng($image_url);
    break;
}

$src_w = imagesx($src_img);
$src_h = imagesy($src_img);

$portion = $src_h / $src_w;


# w, h값이 있으면 thumbnail로 보여주기
if(!is_numeric($w1) || empty($w1)) $w1 = $img_info[0];
if(!is_numeric($h1) || empty($h1)) $h1 = $img_info[1];
$dest_w = $w1;
$dest_h = $h1;
$dst_img = imagecreatetruecolor($dest_w, $dest_h);


# 배경이미지 흰색으로 채우는 부분 - 투명이미지가 이상하게 보이는 현상을 방지
$white = imagecolorallocate($dst_img,255,255,255);
imagefill($dst_img, 0, 0, $white);

imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, $dest_w, $dest_h, $src_w, $src_h);

imagedestroy($src_img);

flush();

$watermark = imagecreatefromjpeg(WATERMARK);

$watermark_w = imagesx($watermark);
$watermark_h = imagesy($watermark);

$resize_w = $watermark_w;
$resize_h = $watermark_h;
if ($dest_w < 100) {
  $resize_w = $watermark_w / 2;
  $resize_h = $watermark_h / 2;
}
else if ($dest_h < 100) {
  $resize_w = $watermark_w / 2;
  $resize_h = $watermark_h / 2;
}
$overlay_img = imagecreatetruecolor($watermark_w, $watermark_h);
imagecopyresized($overlay_img, $watermark, 0, 0, 0, 0, $resize_w, $resize_h, $watermark_w, $watermark_h);
imagedestroy($watermark);

$white = imagecolorallocate($overlay_img, 0xFF, 0xFF, 0xFF);
$black = imagecolorallocate($overlay_img, 0x00, 0x00, 0x00);
imagecolortransparent($overlay_img, $black);


# 워터마크 중앙에 배치
$offsetX = ($dest_w - $watermark_w - 3) / 2;
$offsetY = ($dest_h - $watermark_h - 3) / 2;

# 워터마크 좌상단에 배치
# $offsetX = 3;
# $offsetY = 3;

# 워터마크 우상단에 배치
# $offsetX = $dest_w - $watermark_w - 3;
# $offsetY = $dest_h - $watermark_h - 3;


# w, h값이 있으면 thumbnail로 보여주되 워터마크 적용안함!!
if (empty($thumb_w1) && empty($thumb_h1)) imagecopymerge($dst_img,$overlay_img,$offsetX,$offsetY,0,0,$watermark_w,$watermark_h, 30);
imagedestroy($overlay_img);

$res = imagejpeg($dst_img, "", 100);
imagedestroy($dst_img);

flush();

exit;
?>

가끔 PHP로 웹페이지를 작성할 일이 있는데, 유용한 팁을 우연히 보게 되어 한글로 옮겨적어본다.
원본은 40 Tips for optimizing your php Code


1. If a method can be static, declare it static. Speed improvement is by a factor of 4.
메쏘드가 static이 될 수 있다면 static으로 선언하라. 4배 빨라진다.

2. echo is faster than print.
echo가 print보다 빠르다.

3. Use echo’s multiple parameters instead of string concatenation.
문자열을 이어붙이지 말고, echo를 이용하여 여러 개의 파라미터를 적어라.

4. Set the maxvalue for your for-loops before and not in the loop.
for 루프을 위핸 최대값(탈출조건)을 루프 안에서가 아니고 루프 시작 이전에 지정하라.

5. Unset your variables to free memory, especially large arrays.
메모리를 해제하기 위해 변수를 unset하라. 특히 커다란 배열은 그래야 된다.

6. Avoid magic like __get, __set, __autoload
__get, __set, __autoload와 같은 마법을 피해라.

7. require_once() is expensive
require_once()는 비싸다.

8. Use full paths in includes and requires, less time spent on resolving the OS paths.
include와 require를 사용할 때, 경로를 찾는데 시간이 적게 걸리는 full path를 사용하라.

9. If you need to find out the time when the script started executing, $_SERVER[’REQUEST_TIME’] is referred to time()
스크립트가 언제 실행했는지 알고 싶으면 time()보다 $_SERVER[’REQUEST_TIME’]이 좋다.

10. See if you can use strncasecmp, strpbrk and stripos instead of regex
정규표현식보다는 가능하면 strncasecmp나 strpbrk, stripos를 사용하라.
* 역주
strncasecmp: 두 문자열의 앞쪽 일부가 대소문자 구분없이 일치하는지 확인할 때 사용
strpbrk: 문자 집합에 속한 특정 문자가 문자열에 나타나는지 확인할 때 사용
stripos: 대소문자 구분없이 특정 문자열이 다른 문자열에 포함되는지 확인할 때 사용

11. str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4 str_replace가 reg_replace보다 빠르지만, strtr은 str_replace보다 4배 빠르다.

12. If the function, such as string replacement function, accepts both arrays and single characters as arguments, and if your argument list is not too long, consider writing a few redundant replacement statements, passing one character at a time, instead of one line of code that accepts arrays as search and replace arguments.
만약 문자열 교체 같은 함수가 배열과 문자열을 인자로 받아들이면, 그리고 그 인자 리스트가 길지 않다면, 배열을 한 번에 받아들여서 처리하는 것 대신에 한 번에 문자열을 하나씩 넘겨서 처리하는 것을 고려해봐라.

13. It’s better to use select statements than multi if, else if, statements.
여러 개의 if/else if 문장 대신에 select 문장을 사용하는 게 더 좋다.

14. Error suppression with @ is very slow.
@를 이용한 에러 출력 방지는 매우 느리다.

15. Turn on apache’s mod_deflate
Apache의 mod_deflate를 켜라.
*역주
mod_deflate는 서버의 출력을 클라이언트에게 보내기 전에 압축하는 모듈임

16. Close your database connections when you’re done with them
DB를 다 사용했으면 연결을 닫아라.

17. $row[’id’] is 7 times faster than $row[id]
$row[’id’]가 $row[id]보다 7배 빠르다.

18. Error messages are expensive
에러 메시지는 비싸다.

19. Do not use functions inside of for loop, such as for ($x=0; $x < count($array); $x) The count() function gets called each time.
for 루프의 표현식 안에서 함수를 사용하지 마라.
for ($x = 0; $x < count($array); $x)에서 count() 함수가 매번 호출된다.

20. Incrementing a local variable in a method is the fastest. Nearly the same as calling a local variable in a function.
메쏘드 안에서 지역 변수를 증가시키는 것이 거의 함수 안에서 지역 변수를 호출(증가?)하는 것만큼 빠르다.

21. Incrementing a global variable is 2 times slow than a local var.
전역 변수를 증가시키는 것이 지역 변수를 증가시키는 것보다 2배 느리다.

22. Incrementing an object property (eg. $this->prop++) is 3 times slower than a local variable.
객체의 멤버변수를 증가시키는 것이 지역 변수를 증가시키는 것보다 3배 느리다.

23. Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one.
값이 지정되지 않은 지역 변수를 증가시키는 것이 미리 초기화된 변수를 증가시키는 것보다 9~10배 느리다.

24. Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var). PHP probably does a check to see if the global exists.
전역 변수를 함수 안에서 사용하지 않으면서 그저 선언하기만 해도 (지역 변수를 증가시키는 것만큼) 느려진다. PHP는 아마 전역 변수가 존재하는지 알기 위해 검사를 하는 것 같다.

25. Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance.
메쏘드 호출은 클래스 안에서 정의된 메쏘드의 갯수에 독립적인 듯 하다. 왜냐하면 10개의 메쏘드를 테스트 클래스에 추가해봤으나 성능에 변화가 없었기 때문이다.

26. Methods in derived classes run faster than ones defined in the base class.
파생된 클래스의 메쏘드가 베이스 클래스에서 정의된 것보다 더 빠르게 동작한다.

27. A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations. A similar method call is of course about 15 $localvar++ operations.
한 개의 매개변수를 가지고 함수를 호출하고 함수 바디가 비어있다면(함수 내부에서 아무것도 실행하지 않는다면) 그것은 7~8개의 지역변수를 증가시키는 것과 똑같은 시간을 차지한다. 비슷한 메쏘드 호출은 마찬가지로 15개의 지역변수를 증가시키는 연산쯤 된다.

28. Surrounding your string by ‘ instead of ” will make things interpret a little faster since php looks for variables inside “…” but not inside ‘…’. Of course you can only do this when you don’t need to have variables in the string.
문자열을 이중 따옴표 대신에 단일 따옴표로 둘러싸는 것은 좀 더 빠르게 해석되도록 한다. 왜냐하면 PHP가 이중 따옴표 안의 변수를 찾아보지만 단일 따옴표 안에서는 변수를 찾지 않기 때문이다. 물론 문자열 안에서 변수를 가질 필요가 없을 때만 이렇게 사용할 수 있다.

29. When echoing strings it’s faster to separate them by comma instead of dot. Note: This only works with echo, which is a function that can take several strings as arguments.
문자열을 echo할 때 마침표 대신에 쉼표로 분리하는 것이 더 빠르다.
주의: 이것은 여러 문자열을 인자로 받아들이는 함수인 echo로만 작동한다.

30. A PHP script will be served at least 2-10 times slower than a static HTML page by Apache. Try to use more static HTML pages and fewer scripts.
Apache에 의해 PHP 스크립트는 정적 HTML 페이지보다 최소 2에서 10배 느리게 서비스된다. 더 많은 정적 HTML 페이지와 더 적은 스크립트를 사용하려고 노력하라.

31. Your PHP scripts are recompiled every time unless the scripts are cached. Install a PHP caching product to typically increase performance by 25-100% by removing compile times.
PHP 스크립트는 캐시되지 않으면 매번 재 컴파일된다. 컴파일 시간을 제거함으로써 25~100%만큼의 성능을 증가시키기 위해 PHP 캐싱 도구를 설치하라.

32. Cache as much as possible. Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load. OP code caches are useful so that your script does not have to be compiled on every request
가능한 한 많이 캐시하라. memcached를 사용하라. memcached는 고성능 메모리 객체 캐싱 시스템이다.

33. When working with strings and you need to check that the string is either of a certain length you’d understandably would want to use the strlen() function. This function is pretty quick since it’s operation does not perform any calculation but merely return the already known length of a string available in the zval structure (internal C struct used to store variables in PHP). However because strlen() is a function it is still somewhat slow because the function call requires several operations such as lowercase & hashtable lookup followed by the execution of said function. In some instance you can improve the speed of your code by using an isset() trick.
문자열을 가지고 작업하며 문자열이 특정 길이인지 확인할 필요가 있을 때, strlen() 함수를 쓸 것이다. 이 함수는 계산없이 zval 구조체에서 사용할 수 있는 이미 알려진 문자열 길이를 반환하기 때문에 매우 빠르다. 그러나 strlen()이 함수이기 때문에 여전히 조금 느리다. 왜냐하면 함수 호출은 언급된 함수의 실행 뒤에 lowercase와 hashtable lookup같은 여러 개의 연산을 호출하기 때문이다. 어떤 경우에는 isset() 트릭을 이용하여 코드의 스피드를 증가시킬 수도 있다.

Ex.
if (strlen($foo) < 5) { echo "Foo is too short"; }
vs.
if (!isset($foo{5})) { echo "Foo is too short"; }

Calling isset() happens to be faster then strlen() because unlike strlen(), isset() is a language construct and not a function meaning that it's execution does not require function lookups and lowercase. This means you have virtually no overhead on top of the actual code that determines the string's length.
isset()을 호출하는 것은 strlen()과는 달리 isset()이 언어 기본문법이고 함수가 아니기 때문에 함수 찾와 lowercase 작업을 필요로 하지 않으므로 strlen()보다 더 빠를 수도 있다. 이것은 가상적으로 문자열의 길이를 결정하는 실제 코드에 과부하가 없다는 것을 의미한다.

34. When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don't go modifying your C or Java code thinking it'll suddenly become faster, it won't. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend's PHP optimizer. It is a still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer.
변수 $i의 값을 증가시키거나 감소키킬 때, $i++은 ++$i보다 조금 더 느릴 수 있다. 이것은 PHP의 특징이고 다른 언어에는 해당되지 않으니 좀 더 빨라질 것을 기대하면서 C나 Java 코드를 바꾸러 가지 마라. 안 빨라질 것이다. ++$i는 PHP에서 좀 더 빠른데 그것은 $i++에 4개의 opcode가 사용되는 대신에 3개만 필요하기 때문이다. 후증가는 사실 증가될 임시변수의 생성을 초래한다. 반면에 전증가는 원래 값을 직접 증가시킨다. 이것은 opcode가 Zend의 PHP optimizer처럼 최적화하는 최적화 기법의 하나이다. 모든 opcode optimizer들이 이 최적화를 수행하는 것은 아니고 많은 ISP와 server들이 opcode optimizer없이 수행되고 있기 때문에 명심하는 게 좋을 것이다.

35. Not everything has to be OOP, often it is too much overhead, each method and object call consumes a lot of memory.
모든 것이 OOP일 필요는 없다. 종종 그것은 너무 많은 과부하가 된다. 각각의 메쏘드와 객체 호출은 메모리를 많이 소비한다.

36. Do not implement every data structure as a class, arrays are useful, too
모든 데이터 구조를 클래스로 구현하지 마라. 배열도 유용하다.

37. Don't split methods too much, think, which code you will really re-use
메쏘드를 너무 많이 분리하지 마라. 어떤 코드를 정말 재사용할지 생각해봐라.

38. You can always split the code of a method later, when needed
항상 메쏘드의 코드를 나중에 필요할 때 분리할 수 있다.

39. Make use of the countless predefined functions
수많은 미리 정의된 함수를 활용해라.

40. If you have very time consuming functions in your code, consider writing them as C extensions
매우 시간을 소비하는 함수가 있다면, C 확장으로 작성하는 것을 고려해봐라.

41. Profile your code. A profiler shows you, which parts of your code consumes how many time. The Xdebug debugger already contains a profiler. Profiling shows you the bottlenecks in overview
당신의 코드를 프로파일해봐라. 프로파일러는 코드의 어떤 부분이 가장 많은 시간을 소비하는지 보여준다. Xdebug 디버거는 이미 프로파일러를 포함하고 있다. 프로파일링은 전체적인 병목을 보여준다.

42. mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%
Apache 모듈로 사용가능한 mod_gzip은 실행 중에 데이터를 압축하여 전송할 데이터를 80%까지 줄일 수 있다.

<?  
shell_exec("rm -rf (계정경로)/zbxe/files");  
?>

위 소스를 rmrf.php로 저장후 변경하고자 하는 폴더 한단계 상위 폴더에 업로드후 웹에서 실행시켜주시면 됩니다.
이런식으로 하면. 노바디 권한(FTP상에서 삭제되지 않는 폴더를 삭제해 줍니다.)

EX// 삭제하고자 하는 files 디렉토리가 홈루트/zbxe/files에 잇다면
        rmrf.php는 홈루트/zbxe에 업로드후 실행.


files대신에 삭제고자 하는.. 폴더명을 입력하시면 됩니다.

주의
*하위 디렉토리의 퍼미션까지 조정됩니다.
<?php
$cmd = "chmod -R 777 files";
@exec($cmd);
echo "변경되었습니다.";
?>

위 소스를 chmod.php로 저장후 변경하고자 하는 폴더 한단계 상위 폴더에 업로드후 웹에서 실행시켜주시면 됩니다.
이런식으로 하면. 노바디 권한(FTP로 변경되지 않는 파일의 경우에도 퍼미션을 변경해준답니다~)

EX// 퍼미션 변경 하고자 하는 files 디렉토리가 홈루트/zbxe/files에 잇다면
        chmod.php는 홈루트/zbxe에 업로드후 실행.


files대신에 퍼미션 변경하고자 하는.. 폴더명을 입력하시면 됩니다.

주의
*하위 디렉토리의 퍼미션까지 조정됩니다.
 

<?php
// $document should contain an HTML document.
// This will remove HTML tags, javascript-x sections
// and white space. It will also convert some
// common HTML entities to their text equivalent.

$search = array ('@<script-x[^>]*?>.*?</script-x>@si', // Strip out javascript-x
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@([\r\n])[\s]+@', // Strip out white space
'@&(quot|#34);@i', // Replace HTML entities
'@&(amp|#38);@i',
'@&(lt|#60);@i',
'@&(gt|#62);@i',
'@&(nbsp|#160);@i',
'@&(iexcl|#161);@i',
'@&(cent|#162);@i',
'@&(pound|#163);@i',
'@&(copy|#169);@i',
'@&#(\d+);@e'); // evaluate as php

$replace = array ('',
'',
'\1',
'"',
'&',
'<',
'>',
' ',
chr(161),
chr(162),
chr(163),
chr(169),
'chr(\1)');

$text = preg_replace($search, $replace, $document);



strip_tags(get_the_content($document));


?>


1    <?php 
2   // $document should contain an HTML document. 
3   // This will remove HTML tags, javascript-x sections 
4   // and white space. It will also convert some 
5   // common HTML entities to their text equivalent. 
6   $search = array ("'<script-x[^>]*?>.*?</script-x>'si",  // Strip out javascript-x 
7                    "'<[/!]*?[^<>]*?>'si",          // Strip out HTML tags 
8                    "'([rn])[s]+'",                // Strip out white space 
9                    "'&(quot|#34);'i",                // Replace HTML entities 
10                    "'&(amp|#38);'i", 
11                    "'&(lt|#60);'i", 
12                    "'&(gt|#62);'i", 
13                    "'&(nbsp|#160);'i", 
14                    "'&(iexcl|#161);'i", 
15                    "'&(cent|#162);'i", 
16                    "'&(pound|#163);'i", 
17                    "'&(copy|#169);'i", 
18                    "'&#(d+);'e");                    // evaluate as php 
19   $replace = array ("", 
20                    "", 
21                    "\1", 
22                    """, 
23                    "&", 
24                    "<", 
25                    ">", 
26                    " ", 
27                    chr(161), 
28                    chr(162), 
29                    chr(163), 
30                    chr(169), 
31                    "chr(xxx1)"); // remove the "xxx" - this is just for showing the source 
32   $text = preg_replace($search, $replace, $document); 
33   ?>


 

먼저 소스를 올립니다. 조금 길어도 이해를...

아참. 실행결과를 먼저 보고픈 분은 미리보기를 이용해주세요.

▷ 미리보기 : http://www.dreamphp.com/program/20011125_htoh/


// 파일명 htoh.php

<?
/* -----------------------------------------------------------------------------
▶ BiHon's DreamPHP.com (비혼의 조그만 세상)
-master@dreamphp.com
- http://dreamphp.com

▷ 한자를 한글로.
말 그대로 한자를 한글로 바꿔주는 프로그램입니다.

한자를 보다 편하게 읽기 위해, 그리고 폰트피아의 웹폰트를 위해 만들었습니다.
웹폰트의 경우 한자글꼴에 대한 정보가 없기 떄문에 네모박스로 나와 보기가 좋지
않거든요. [한자 글꼴까지 포함하면 웹폰트 용량이 지금보다 몇배는 더 늘어납니다.
그런 것은 싫죠.]

이를 해결하기 위해 한자가 쓰인 곳마다 앞뒤에 <font face=굴림>悲魂</font> 이렇게
태그를 붙여주면 되지만 번거롭기 때문에 자동으로 붙여주는 프로그램도 만들게
되었는데 지금 이 『한자를 한글로』는 그때의 그 함수를 이용했습니다. ^^

"悲魂" 이런 한자를 "비혼(悲魂)" 이런 식으로 바꿔줍니다.
변경이 쉽게 된다고 한자 공부를 게을리 하지 맙시다.


▷ 사용법?
예제를 보도록 하세요. PHP에 대한 기초적인 지식만 있어도 사용엔 어려움이
없을거에요. 그리고 아시죠? 문제점 있으면 연락좀 주세요. 수정할 수 있도록. ^-^/



----------------------------------------------------------------------------- */

function hanja_hangul() { // 한글_한자 데이터 파일 읽어오는 함수
global $hanja; // 전역변수 선언
$temp = "가 伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕
각 刻却各恪慤殼珏脚覺角閣
간 侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間
갈 乫喝曷渴碣竭葛褐蝎鞨
감 勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕
갑 匣岬甲胛鉀閘
강 剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇
개 介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開
객 喀客
갱 坑更粳羹
갹 醵
거 倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸
건 乾件健巾建愆楗腱虔蹇鍵騫
걸 乞傑杰桀
검 儉劍劒檢瞼鈐黔
겁 劫怯迲
게 偈憩揭
격 擊格檄激膈覡隔
견 堅牽犬甄絹繭肩見譴遣鵑
결 抉決潔結缺訣
겸 兼慊箝謙鉗鎌
경 京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨
계 係啓堺契季屆悸戒桂械棨溪界癸磎稽系繫繼計誡谿階鷄
고 古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓
곡 哭斛曲梏穀谷鵠
곤 困坤崑昆梱棍滾琨袞鯤
골 汨滑骨
공 供公共功孔工恐恭拱控攻珙空蚣貢鞏
곶 串
과 寡戈果瓜科菓誇課跨過鍋顆
곽 廓槨藿郭
관 串冠官寬慣棺款灌琯瓘管罐菅觀貫關館
괄 刮恝括适
광 侊光匡壙廣曠洸炚狂珖筐胱鑛
괘 卦掛罫
괴 乖傀塊壞怪愧拐槐魁
굉 宏紘肱轟
교 交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫
구 丘久九仇俱具勾區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜
국 國局菊鞠鞫麴
군 君窘群裙軍郡
굴 堀屈掘窟
궁 宮弓穹窮芎躬
권 倦券勸卷圈拳捲權淃眷
궐 厥獗蕨蹶闕
궤 机櫃潰詭軌饋
귀 句晷歸貴鬼龜
규 叫圭奎揆槻珪硅窺竅糾葵規赳逵閨
균 勻均畇筠菌鈞龜
귤 橘
극 克剋劇戟棘極隙
근 僅劤勤懃斤根槿瑾筋芹菫覲謹近饉
글 契
금 今妗擒昑檎琴禁禽芩衾衿襟金錦
급 伋及急扱汲級給
긍 亘兢矜肯
기 企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒
긴 緊
길 佶吉拮桔
김 金
끽 喫
나 儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那
낙 樂洛烙珞落諾酪駱
난 亂卵暖欄煖爛蘭難鸞
날 捏捺
남 南嵐枏楠湳濫男藍襤
납 拉納臘蠟衲
낭 囊娘廊朗浪狼郎
내 乃來內奈柰耐
냉 冷
녀 女
년 年撚秊
념 念恬拈捻
녕 寧寗
노 努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺
녹 碌祿綠菉錄鹿
논 論
농 壟弄濃籠聾膿農
뇌 惱牢磊腦賂雷
뇨 尿
누 壘屢樓淚漏累縷陋
눈 嫩
눌 訥
뉴 杻紐
늑 勒肋
늠 凜
능 凌稜綾能菱陵
니 尼泥
닉 匿溺
다 多茶
단 丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛
달 撻澾獺疸達
담 啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟
답 沓畓答踏遝
당 唐堂塘幢戇撞棠當糖螳黨
대 代垈坮大對岱帶待戴擡玳臺袋貸隊黛
댁 宅
덕 德悳
도 倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃棹櫂淘滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜
독 毒瀆牘犢獨督禿篤纛讀
돈 墩惇敦旽暾沌焞燉豚頓
돌 乭突
동 仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅
두 兜斗杜枓痘竇荳讀豆逗頭
둔 屯臀芚遁遯鈍
득 得
등 嶝橙燈登等藤謄鄧騰
라 喇懶拏癩羅蘿螺裸邏
락 樂洛烙珞絡落諾酪駱
란 丹亂卵欄欒瀾爛蘭鸞
랄 剌辣
람 嵐擥攬欖濫籃纜藍襤覽
랍 拉臘蠟
랑 廊朗浪狼琅瑯螂郞
래 來崍徠萊
랭 冷掠
략 略
량 亮倆兩凉梁樑粮粱糧良諒輛量
려 侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎
력 力曆歷瀝礫轢靂
련 憐戀攣漣煉璉練聯蓮輦連鍊
렬 冽列劣洌烈裂
렴 廉斂殮濂簾
렵 獵
령 令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡
례 例澧禮醴隷
로 勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵
록 碌祿綠菉錄鹿麓
론 論
롱 壟弄朧瀧瓏籠聾
뢰 儡瀨牢磊賂賚賴雷
료 了僚寮廖料燎療瞭聊蓼遼鬧
룡 龍
루 壘婁屢樓淚漏瘻累縷蔞褸鏤陋
류 劉旒柳榴流溜瀏琉瑠留瘤硫謬類
륙 六戮陸
륜 侖倫崙淪綸輪
률 律慄栗率
륭 隆
륵 勒肋
름 凜
릉 凌楞稜綾菱陵
리 俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉
린 吝潾燐璘藺躪隣鱗麟
림 林淋琳臨霖
립 砬立笠粒
마 摩瑪痲碼磨馬魔麻
막 寞幕漠膜莫邈
만 万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻
말 唜抹末沫茉襪靺
망 亡妄忘忙望網罔芒茫莽輞邙
매 埋妹媒寐昧枚梅每煤罵買賣邁魅
맥 脈貊陌驀麥
맹 孟氓猛盲盟萌
멱 冪覓
면 免冕勉棉沔眄眠綿緬面麵
멸 滅蔑
명 冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴
몌 袂
모 侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌
목 木沐牧目睦穆鶩
몰 歿沒
몽 夢朦蒙
묘 卯墓妙廟描昴杳渺猫竗苗錨
무 務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡
묵 墨默
문 們刎吻問文汶紊紋聞蚊門雯
물 勿沕物
미 味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴
민 岷悶愍憫敏旻旼民泯玟珉緡閔
밀 密蜜謐
박 剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁
반 伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯
발 勃拔撥渤潑發跋醱鉢髮魃
방 倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐
배 倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪
백 伯佰帛柏栢白百魄
번 幡樊煩燔番磻繁蕃藩飜
벌 伐筏罰閥
범 凡帆梵氾汎泛犯範范
법 法琺
벽 僻劈壁擘檗璧癖碧蘗闢霹
변 便卞弁變辨辯邊
별 別瞥鱉鼈
병 丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈
보 保堡報寶普步洑湺潽珤甫菩補褓譜輔
복 伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒
본 本
볼 乶
봉 俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳
부 不付俯傅剖副否咐埠夫婦孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧
북 北
분 分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰
불 不佛弗彿拂
붕 崩朋棚硼繃鵬
비 丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥脾臂菲蜚裨誹譬費鄙非飛鼻
빈 嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻
빙 憑氷聘騁
사 乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝
삭 削數朔索
산 傘刪山散汕珊産疝算蒜酸霰
살 乷撒殺煞薩
삼 三參杉森渗芟蔘衫
삽 揷澁鈒颯
상 上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜
새 塞璽賽
색 嗇塞穡索色
생 牲生甥省笙
서 墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署胥舒薯西誓逝鋤黍鼠
석 夕奭席惜昔晳析汐淅潟石碩蓆釋錫
선 仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮
설 卨屑楔泄洩渫舌薛褻設說雪齧
섬 剡暹殲纖蟾贍閃陝
섭 攝涉燮葉
성 城姓宬性惺成星晟猩珹盛省筬聖聲腥誠醒
세 世勢歲洗稅笹細說貰
소 召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷
속 俗屬束涑粟續謖贖速
손 孫巽損蓀遜飡
솔 率
송 宋悚松淞訟誦送頌
쇄 刷殺灑碎鎖
쇠 衰釗
수 修受嗽囚垂壽嫂守岫峀帥愁戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚
숙 叔塾夙孰宿淑潚熟琡璹肅菽
순 巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴
술 戌術述鉥
숭 崇崧嵩
슬 瑟膝蝨
습 濕拾習褶襲
승 丞乘僧勝升承昇繩蠅陞
시 侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺
식 埴寔式息拭植殖湜熄篒蝕識軾食飾
신 伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅
실 失室實悉
심 審尋心沁沈深瀋甚芯諶
십 什十拾
쌍 雙
씨 氏
아 亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝
악 堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷
안 安岸按晏案眼雁鞍顔鮟
알 斡謁軋閼
암 唵岩巖庵暗癌菴闇
압 壓押狎鴨
앙 仰央怏昻殃秧鴦
애 厓哀埃崖愛曖涯碍艾隘靄
액 厄扼掖液縊腋額
앵 櫻罌鶯鸚
야 也倻冶夜惹揶椰爺耶若野
약 弱掠略約若葯蒻藥躍
양 亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養
어 圄御於漁瘀禦語馭魚齬
억 億憶抑檍臆
언 偃堰彦焉言諺
얼 孼蘖
엄 俺儼嚴奄掩淹
업 嶪業
엔 円
여 予余勵呂女如廬旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎
역 亦力域役易曆歷疫繹譯轢逆驛
연 嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶
열 列劣咽悅涅烈熱裂說閱
염 厭廉念捻染殮炎焰琰艶苒簾閻髥鹽
엽 曄獵燁葉
영 令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領
예 乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預
오 五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳烏熬獒筽蜈誤鰲鼇
옥 屋沃獄玉鈺
온 溫瑥瘟穩縕蘊
올 兀
옹 壅擁瓮甕癰翁邕雍饔
와 渦瓦窩窪臥蛙蝸訛
완 婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑
왈 曰
왕 往旺枉汪王
왜 倭娃歪矮
외 外嵬巍猥畏
요 了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療窈窯繇繞耀腰蓼蟯要謠遙遼邀饒
욕 慾欲浴縟褥辱
용 俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍
우 于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩
욱 勖彧旭昱栯煜稶郁頊
운 云暈橒殞澐熉耘芸蕓運隕雲韻
울 蔚鬱亐
웅 熊雄
원 元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛
월 月越鉞
위 位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏
유 乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類
육 六堉戮毓肉育陸
윤 倫允奫尹崙淪潤玧胤贇輪鈗閏
율 律慄栗率聿
융 戎瀜絨融隆
은 垠恩慇殷誾銀隱
을 乙
음 吟淫蔭陰音飮
읍 揖泣邑
응 凝應膺鷹
의 依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼議醫
이 二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌
익 匿溺瀷益翊翌翼謚
인 人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟
일 一佚佾壹日溢逸鎰馹
임 任壬妊姙恁林淋稔臨荏賃
입 入卄立笠粒
잉 仍剩孕芿
자 仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌
작 作勺嚼斫昨灼炸爵綽芍酌雀鵲
잔 孱棧殘潺盞
잠 岑暫潛箴簪蠶
잡 雜
장 丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長障
재 再哉在宰才材栽梓渽滓災縡裁財載齋齎
쟁 爭箏諍錚
저 佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟
적 勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑
전 佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞
절 切截折浙癤竊節絶
점 占岾店漸点粘霑鮎點
접 接摺蝶
정 丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖靜頂鼎
제 制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊
조 俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥
족 族簇足鏃
존 存尊
졸 卒拙猝
종 倧宗從悰慫棕淙琮種終綜縱腫踪踵鍾鐘
좌 佐坐左座挫
죄 罪
주 主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐
죽 竹粥
준 俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿
줄 茁
중 中仲衆重
즉 卽
즐 櫛
즙 楫汁葺
증 增憎曾拯烝甑症繒蒸證贈
지 之只咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲
직 直稙稷織職
진 唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震
질 侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭
짐 斟朕
집 什執潗緝輯鏶集
징 徵懲澄
차 且侘借叉嗟嵯差次此磋箚茶蹉車遮
착 捉搾着窄錯鑿齪
찬 撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌
찰 刹察擦札紮
참 僭參塹慘慙懺斬站讒讖
창 倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼
채 債埰寀寨彩採砦綵菜蔡采釵
책 冊柵策責
처 凄妻悽處
척 倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻
천 仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆
철 凸哲喆徹撤澈綴輟轍鐵
첨 僉尖沾添甛瞻簽籤詹諂
첩 堞妾帖捷牒疊睫諜貼輒
청 廳晴淸聽菁請靑鯖
체 切剃替涕滯締諦逮遞體
초 初剿哨憔抄招梢椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮
촉 促囑燭矗蜀觸
촌 寸忖村
총 邨叢塚寵悤憁摠總聰蔥銃
촬 撮
최 催崔最
추 墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍
축 丑畜祝竺筑築縮蓄蹙蹴軸逐
춘 春椿瑃
출 出朮黜
충 充忠沖蟲衝衷
췌 悴膵萃
취 贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲
측 側仄厠惻測
층 層
치 侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒
칙 則勅飭
친 親
칠 七柒漆
침 侵寢枕沈浸琛砧針鍼
칩 蟄
칭 秤稱
쾌 快
타 他咤唾墮妥惰打拖朶楕舵陀馱駝
탁 倬卓啄坼度托拓擢晫柝濁濯琢琸託鐸
탄 呑嘆坦彈憚歎灘炭綻誕
탈 奪脫
탐 探眈耽貪
탑 塔搭榻
탕 宕帑湯糖蕩
태 兌台太怠態殆汰泰笞胎苔跆邰颱
택 宅擇澤
탱 撑
터 攄
토 兎吐土討
통 慟桶洞痛筒統通
퇴 堆槌腿褪退頹
투 偸套妬投透鬪
특 慝特
틈 闖
파 坡婆巴把播擺杷波派爬琶破罷芭跛頗
판 判坂板版瓣販辦鈑阪
팔 八叭捌
패 佩唄悖敗沛浿牌狽稗覇貝
팽 彭澎烹膨
퍅 愎
편 便偏扁片篇編翩遍鞭騙
폄 貶
평 坪平枰萍評
폐 吠嬖幣廢弊斃肺蔽閉陛
포 佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑
폭 幅暴曝瀑爆輻
표 俵剽彪慓杓標漂瓢票表豹飇飄驃
품 品稟
풍 楓諷豊風馮
피 彼披疲皮被避陂
필 匹弼必泌珌畢疋筆苾馝
핍 乏逼
하 下何厦夏廈昰河瑕荷蝦賀遐霞鰕
학 壑學虐謔鶴
한 寒恨悍旱汗漢澣瀚罕翰閑閒限韓
할 割轄
함 函含咸啣喊檻涵緘艦銜陷鹹
합 合哈盒蛤閤闔陜
항 亢伉姮嫦巷恒抗杭桁沆港缸肛航行降項
해 亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸
핵 劾核
행 倖幸杏荇行
향 享向嚮珦鄕響餉饗香
허 噓墟虛許
헌 憲櫶獻軒
헐 歇
험 險驗
혁 奕爀赫革
현 俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯
혈 孑穴血頁
혐 嫌
협 俠協夾峽挾浹狹脅脇莢鋏頰
형 亨兄刑型形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨
혜 兮彗惠慧暳蕙蹊醯鞋
호 乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥
혹 惑或酷
혼 婚昏混渾琿魂
홀 忽惚笏
홍 哄弘汞泓洪烘紅虹訌鴻
화 化和嬅樺火畵禍禾花華話譁貨靴
확 廓擴攫確碻穫
환 丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥
활 活滑猾豁闊
황 凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃
회 匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄
획 劃獲
횡 宖橫鐄
효 哮嚆孝效斅曉梟涍淆爻肴酵驍
후 侯候厚后吼喉嗅帿後朽煦珝逅
훈 勛勳塤壎焄熏燻薰訓暈
훙 薨
훤 喧暄煊萱
훼 卉喙毁
휘 彙徽揮暉煇諱輝麾
휴 休携烋畦虧
휼 恤譎鷸
흉 兇凶匈洶胸
흑 黑
흔 昕欣炘痕
흘 吃屹紇訖
흠 欠欽歆
흡 吸恰洽翕
흥 興
희 僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲
힐 詰"; // 깔끔하진 않지만 일부러 포함 [사용의 편리성 증대]
$hanja_data = explode("\n",$temp); unset($temp); // 줄수 구함 & 변수 초기화
// 참고. file() 함수로 동일한 효과를 얻을 수 있으나 위 방법보다 느림
$hanja_line = sizeof($hanja_data); // 줄수 구함
for ($i=0; $i<=$hanja_line; $i++) { // 줄수만큼 반복 (마지막에 다음줄 없기 때문에 마지막값 포함)
unset($len,$hangul,$key); // 변수 초기화
$len = strlen($hanja_data[$i]); // 배열의 길이를 구함
$hangul = substr($hanja_data[$i],0,2); // 앞에서 2바이트 구함 (한글 한자는 2바이트)
for ($j=3;$j<$len;$j+=2) { // 길이만큼 반복 (앞의 한글 한자와 공백 이후부터 2바이트씩 증가)
$key = substr($hanja_data[$i],$j,2); // 한자를 한글자 가져옴
$hanja[$key] = $hangul; // $hanja[한자] = 한글; 기억
}
}
unset($hanja_data,$hanja_len); // 변수 초기화 [괜한 깔끔~ ^^]
}
hanja_hangul(); // ▷ 이렇게 함수 한번 호출함으로써 데이터 입력 끝!

function hanja ($string,$opt="kc",$head="(",$tail=")") {
global $hanja; // 전역변수 선언
$hs = hexdec("CA"); // 한자 첫바이트의 범위 시작값 (10진수로)
// 참고. 한자코드 범위 : XXYYh (XX="CAh~FDh",YY="A1h~FEh");
$len = strlen($string); // 문자열의 길이 구함
$check = 0; // 이어지는 경우 배열 한곳에 기록하기 위한 임시 변수
$c = -1; // 배열은 0부터 시작. 처음 한자 기록시 1 증가시키면 0이 되니까.[허접]
for ($i=0; $i<$len;) { // 문자열의 길이만큼 반복
$temp = ord($string[$i]); // 한바이트의 아스키값을 구함
if ($temp > 127) { // 해당 아스키값이 한글,한자 영역일 경우
if ($temp>=$hs) { // 한자 영역일 경우
if (!$check) { // 체크가 없을 경우
$c++; // 첨자 1 증가
$check = 1; // 이어짐 계속
$data[$c] = substr($string,$i,2); // 한자 한글자 배열에 저장
} else { // 체크가 있을 경우
$data[$c].= substr($string,$i,2); // 한자 한글자 배열에 추가
}
} else { // 한자 영역이 아닐 경우
$check = 0; // 이어짐 끝
}
$i+=2; // 한글, 한자 등 2바이트 영역이기 때문에 2 증가
} else {
$check = 0; // 이어짐 끝
$i++; // 숫자, 영문 등 1바이트 영역이기 때문에 1 증가
}
}
$size = sizeof($data); // 배열의 크기 구함
for ($i=0; $i<$size; $i++) { // 배열의 크기만큼 반복
$len2 = strlen($data[$i]); // ★ 문자열의 길이 구함
for ($j=0; $j<$len2; $j+=2) $hangul[$i].=$hanja[substr($data[$i],$j,2)]; // ★ 한글로 변환
switch ($opt) {
case "k": $string = str_replace($data[$i],$head.$hangul[$i].$tail,$string); break; // 한글만
case "c": $string = str_replace($data[$i],$head.$data[$i].$tail,$string); break; // 한자만
default: $string = str_replace($data[$i],$hangul[$i].$head.$data[$i].$tail,$string); // 한글(한자)로
}
}
return $string; // 문자열 반환
}

?>

// 파일명 : test.php
<?
include "htoh.php"; // PHP 문서 상단에 위 htoh.php 파일을 require나 include 합니다.

$sample = "東海물과 白頭山이 마르고 닳도록 하느님이 保佑하사 우리나라 만세"; // 예제 문자열

echo hanja($sample); // 함수호출
?>

실행하면
동해(東海)물과 백두산(白頭山)이 마르고 닳도록 하느님이 보우(保佑)하사 우리나라 만세
이렇게 출력됩니다.

주어지는 옵션에 따라 한글이나 한자만 출력하도록 지정한다거나, 앞뒤에
붙는 태그를 마음대로 지정할 수 있습니다. ^^

(출처 : "한자를 한글로 변환. ^^" - 『모이자』 조선족 커뮤니티)

소개

웹페이지에서 MAC Address 구하는 ActiveX 컨트롤입니다.
웹에서 인증 처리할 때 아이디, 암호와 같이 사용하면 좋을 것 같습니다.

서버에 미리 접근을 허가할 맥어드레스를 디비, 파일 등에 저장시켜 두고 이 컨트롤로 얻은 맥어드레스와 비교하는 방법으로 사용하면 됩니다.

주의: 자바스크립트로 처리되기 때문에 사용자가 임의의 값을 대입시켜 조작할 수 있습니다. 서버에 저장된 맥어드레스를 알 지 못하면 관계 없습니다만…


기능:
1. 맥어드레스 구하기 - 네트워크 카드가 여러 개 일 경우 모두 구함(한 줄에 하나씩)
2. 컴퓨터 이름 구하기
3. 작업 그룹 구하기

 

Method

-        컨트롤ID.MAC                    -> 맥어드레스 구하기

-        컨트롤ID. ComputerName    -> 컴퓨터 이름 구하기

-        컨트롤ID. WorkGroup          -> 작업 그룹 구하기

(여기서 컨트롤ID는 OBJECT 코드에 있는 ID값입니다.)

 

데모 페이지: http://isulnara.com/myAPP/AuthByMAC/AuthByMac.html

다운로드: http://isulnara.com/myAPP/AuthByMAC/AuthByMAC.cab

 


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

<OBJECT id="auth" classid="clsid:7C159314-7E2C-4E6E-B580-5DF25610F581" codebase="./AuthByMAC.cab#Version=1,1,1,0">
        <PARAM name=copyright value="http://isulnara.com">
</OBJECT>
<SCRIPT LANGUAGE="JavaScript">
<!--
        alert("맥어드레스:n" + auth.MAC);
        alert("컴퓨터 이름:n" + auth.ComputerName);
        alert("작업그룹:n" + auth.WorkGroup);
//-->
</SCRIPT>

 

설치된 컨트롤 삭제 방법 :

C:WINNTDownloaded Program Files에서 “AuthByMacX Control”을 제거하면 됩니다.

누구나 무료로 사용할 수 있습니다. 단, 리버싱은 허락되지 않습니다.


http://tinymce.moxiecode.com/

오늘 써봤는데, 상당히 빠른 로딩 속도와(FCKEditor에 비해 상대적으로!) 지원 API도 훌륭하고... 해서 다음번엔 이걸 써봐야겠다. 다만 언어 팩 같은 경우에 정확히 어떻게 되어 있는지는 모르겠지만, 다운로드 링크에 있는 파일 자체가 조금 깨진 듯. 그래서 한글 언어팩을 적용해도 제대로 한글 표현이 되질 않아서 결국엔 한글 언어팩 제작자 사이트를 찾아내서 이전 버전의 언어팩을 다운로드해서 적용해 봤는데 잘 되더라.

다만 한가지 불편한 점은 FCKEditor에서는 소스 보기와 편집 화면을 토글할 경우 동일한 창에서 내용이 바뀌는데, TinyMCE는 새창에서 소스편집을 하도록 되어 있다.

오늘 적용해본 한글 언어팩은 완전한 버전이 아니어서 단순히 한국어로 설정했을 경우 편집 창의 문자열을 찾지못해 코드를 그대로 보여주게 되는데, 이점은 내가 나중에 영어 언어팩을 기반으로 다시 재편집을 하던지 해서 고쳐서 사용해야 할 듯.
http://www.allredroster.com/iptodec.htm

1. 먼저 IP 주소의 클래스별로 숫자를 분리.
2. 각각의 분리된 숫자를 2진수로 변환(이때 만약 8자리가 아니면 앞에 0을 채워서 8자리로 만든다)
3. 2진수로 변환된 숫자들을 모두 concatenation.
4. concatenation된 숫자들을 다시 10진수로 변환.

마지막으로 변환된 10진수의 앞에 http://를 붙여 주소창에 넣으면 신기(?)하게도 주소로 인식해서 페이지를 보여줌.

네이버 메인 페이지의 IP 주소는 222.122.84.250 인데...
1번 과정의 결과 222 / 122 / 84 / 250 로 분리됨.
2번 과정의 결과 11011110 / 01111010 / 01010100 / 11111010
3번 과정의 결과 11011110011110100101010011111010
4번 과정의 결과 HTTP://3732559098

+ Recent posts