강좌&TIP/PHP2011/12/19 08:59
오랜만에 팁입니다. ^^

MySQL을 외부에서 Delay 현상이 발생하는 경우가 있습니다.
이는 MySQL 에서 DNS를 찾게 되면서 발상하는 현상입니다.

이를 해결하기 위해서는 /etc/my.cnf 에서 [mysqld] 항목에 skip-name-resolve 옵션을 추가한후 재시작하게 되면, Delay 현상을 없앨수 있습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

강좌&TIP/PHP2010/10/10 21:12
Key & Value DB Engine 인 Tokyo Cabinet 을 Apache + PHP 에서 활용하기 위해서는 다음과 같이 3가지를 설치하셔야 합니다. 더 자세한 사항은 저보다 인터넷에 훨씬 잘나와 있기 때문에 설치 가이드만 제공합니다.

설치 자체는 상당히 간단합니다.

1. Tokyo Cabinet 설치 ( tokyocabinet-1.4.46.tar.gz )
  # cd /usr/local/src

  # wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.46.tar.gz
  # tar zxvf tokyocabinet/tokyocabinet-1.4.46.tar.gz
  # cd tokyocabinet/tokyocabinet-1.4.46

  # ./configure --prefix=/usr/local/tokyocabinet

  # make
  # make install


2. Tokyo Tyrant 설치 ( tokyotyrant-1.1.41.tar.gz )
  # cd /usr/local/src

  # wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
  # tar zxvf tokyotyrant-1.1.41.tar.gz
  # cd tokyotyrant-1.1.41

  # ./configure --prefix=/usr/local/tokyotyrant --with-tc=/usr/local/tokyocabinet

  # make
  # make install

3. Tokyo Tyrant 실행 ( B+Tree Mode )
  ex) .tch - Hash, .tcb - B+ Tree, .tcf - Fixed-length, .tct - Table
  # mkdir /home/server/tc-data
  #/usr/local/tokyotyrant/bin/ttserver -port 11211 -thnum 8 -dmn -pid /home/server/tc-data/ttserver.pid -log /home/server/tc-data/ttserver.log -le -ulog /home/server/tc-data/ -ulim 128m -sid 1 -rts /home/server/tc-data/ttserver.rts /home/server/tc-data/database.tcb

  # netstat -anp | grep LISTEN

#############################################################################################
 tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      6657/ttserver
#############################################################################################


4. PECL Tokyo Tyrant 설치 ( tokyo_tyrant-0.5.0.tgz )
  현재 tokyo_tyrant 0.5.0은 pecl로 설치 안되는 경우가 많습니다.
  그래서 수동 설치를 하셔야 됩니다.

  # pecl tokyo_tyrant-0.5.0

  만약 에러가 난다면 수동 설치

  # cd /usr/local/src
  # wget http://pecl.php.net/get/tokyo_tyrant-0.5.0.tgz

  # tar zxvf tokyo_tyrant-0.5.0.tgz
  # cd tokyo_tyrant-0.5.0

  # phpize
  # ./configure --with-php-config=[PHP CONFIG PATH] --with-tokyo-tyrant=/usr/local/tokyotyrant --with-tokyo-cabinet-dir=/usr/local/tokyocabinet

  # make
  # make install

  PHP 설치 DIR 및에 extensions 폴더 아래에 있는 no-debug-non-zts-20060613 폴더로 이동

  # cp tokyo_tyrant.so [PHP 확장 모듈 DIR]

  # service httpd restart

#############################################################################################
<?
  phpinfo();
?>
#############################################################################################

  다음 처럼 정상적으로 tykyo tyrant 모듈이 실행 되었는지 확인

사용자 삽입 이미지

 Tokyo Tyrant 의 자세항 사용법은 http://kr2.php.net/manual/en/class.tokyotyrant.php 참고
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. 네이버갓워즈(으니)

    아...다 영어에요...어려워요 ㅠㅠ
    금룡님~ 네이트 저번 주말같은 문제 생겨서 네이트 유저들네이버에 와서 금룡님 찾아요 ㅋ

    2011/01/25 05:28 [ Permalink : Modify/Delete : Reply ]
  2. 도크

    php, 자바스크립.. 극을 달리시는군요 ㅎㅎ

    2011/05/03 01:36 [ Permalink : Modify/Delete : Reply ]
    • 금룡이

      검색해서 찾아오셨군요;;;
      그냥 전 잉여일뿐인지라;;;

      2011/05/03 01:49 [ Permalink : Modify/Delete ]
  3. 푸근이

    아찌 =_= 저 irc주소 잃어버림 =_=...irc 좀 굽신 굽신...

    2011/06/27 12:43 [ Permalink : Modify/Delete : Reply ]

강좌&TIP/PHP2010/10/10 20:19
동시 접속이 많은 서비스를 MySQL로 운영하다 보니 Connection Fail되는 경우가 생각보다 많이 일어났습니다.

그래서 보통 이를 해결하기 위해 DB Pool 기법을 사용하지만 근본적인 해결방법은 되지 않는다고 하더군요..

결국 다른 대안을 찾던중 Key & Value DB를 알게 되었습니다.

최종 현재 서비스중인 프로그램을 완전 다 고치게 되었습니다.

설계완료된 구조도는 다음과 같습니다.

사용자 삽입 이미지


이 구조가 맞다고 할수는 없습니다.. 다만 이 구조를 따른다면 ( 물론 이 구조에 맞게끔 프로그래밍 하는 것도 중요하겠지요) 좀더 효율적인 서버 활용을 할 수 있지 않을까 합니다.

다른 의견 있으시면 덧글로 남겨주세요..
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

강좌&TIP/PHP2010/10/10 16:23

1. rudiments 설치 ( rudiments-0.32.tar.gz )
  rudiments 는 SQL Relay를 사용하기 위한 C 라이브러리 파일
 
  # cd /usr/local/src
  # wget
http://downloads.sourceforge.net/projec ··· rks-kr-2
  # tar zxvf rudiments-0.32.tar.gz
  # cd rudiments-0.32
  # ./configure
  # make
  # make install

 
  설치를 완료하면 /usr/local/firstworks 에 관련파일이 설치된다.
 
2. SQL Relay 설치 ( sqlrelay-0.39.4.tar.gz )
  SQL Relay를 Dadabase Pool 로서 Database Connection을 효율적으로 관리 할 수 있게 해줍니다.
  여담이지만 최신 sqlrelay 0.41 설치하였는데 listener가 정상적으로 동작하지 않는 문제가 있었습니다.
  구글링을 해보니 같은 문제를 가진 사람들이 여렀있었는데 0.39.4 버전에서는 그런 문제가 없다고 해서 설치해보니 정상 동작 하네요.
 
  # cd /usr/local/src
  # wget
http://downloads.sourceforge.net/projec ··· rks-kr-2
  # tar zxvf sqlrelay-0.39.4.tar.gz
  # cd sqlrelay-0.39.4
  # ./configure --enable-small-code --enable-mysql-rpath --enable-php-rpath --with-php-ext-dir=[PHP 확장 모듈 DIR]

  SQL Relay를 설치하면 php module 인 sql_relay.so 파일이 생성됩니다. 저같은 경우는 /usr/local/php/extensions 에 설치하였습니다.

  # make
  # make install

  완료후 /usr/loca/firstworks 에 설치 됩니다.
 
  # cd /usr/local/firstworks/etc
 
  SQL Relay 접속 환경 설정을 위해 다음과 같이 설정 파일을 만듭니다.
  # vi sqlrelay.conf

#############################################################################################
<!DOCTYPE instances SYSTEM "sqlrelay.dtd">
<instances>
  <!-- Regular SQL Relay Instance -->
  <instance id="[SQL Relay 고유 ID]" port="9000"
    dbase="[접속 DB : mysql]" connections="[최초 커넥션 수 : 3]" maxconnections="[최대 커넥션 수 : 15]" maxqueuelength="0"
    growby="1" ttl="60" endofsession="commit" sessiontimeout="600"
    runasuser="root" runasgroup="root" cursors="5" authtier="listener"
    handoff="pass" deniedips="" allowedips="" debug="none"
    maxquerysize="65536" maxstringbindvaluelength="4000"
    maxlobbindvaluelength="71680" idleclienttimeout="-1" maxlisteners="-1"
    listenertimeout="0" reloginatstart="false">
    <users>
      <user user="[SQL Relay 접속 ID]" password="[SQL Relay 접속 Password]"/>
    </users>
    <connections>
      <connection connectionid="[SQL Relay가 접속할 DB 고유 ID]"
        string="host=[DB HOST];user=[DB ID];password=[DB Password];db=[DB];"
        metric="1" behindloadbalancer="no"/>
    </connections>
  </instance>
</instances>
#############################################################################################
  :wq


  # vi ~/.bash_profile
  .bash_profile 에서 다음 부분을 추가합니다.

PATH=$PATH:$HOME/bin:/usr/local/firstworks/bin


  # source ~/.bash_profile
  수정한 .bash_profile을 적용합니다.
 
  이제 SQL Relay를 실행해서 정상적으로 동작하는지 확인합니다.
  # sqlr-start -id [SQL Relay 고유 ID]

#############################################################################################
sqlr-start -id [SQL Relay 고유 ID] 

Starting listener:
  sqlr-listener -id [SQL Relay 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf

Starting 10 connections to godwars.relay :
  sqlr-connection-mysql -id [SQL Relay 고유 ID] -connectionid [SQL Relay가 접속할 DB 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf
  sqlr-connection-mysql -id [SQL Relay 고유 ID] -connectionid [SQL Relay가 접속할 DB 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf
  sqlr-connection-mysql -id [SQL Relay 고유 ID] -connectionid [SQL Relay가 접속할 DB 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf

Starting scaler:
  sqlr-scaler  -id [SQL Relay 고유 ID] -config /usr/local/firstworks/etc/sqlrelay.conf

Starting cache manager:
  sqlr-cachemanager
Warning: using default id.

Thanks to MP3.com for sponsoring:
 Clustered/Replicated database support.
 Perl API.
Thanks to FeedLounge for sponsoring:
 Query routing and filtering.
#############################################################################################


  # netstat -anp | grep LISTEN

#############################################################################################
tcp        0      0 0.0.0.0:9000                0.0.0.0:*                   LISTEN      25512/sqlr-listener
#############################################################################################

  포트가 정상적으로 열려있는지도 확인합니다.

  이제 Apache 를 재시작 해줍니다.
 
# service httpd restart

#############################################################################################
<?
  phpinfo();
?>
#############################################################################################



  PHP INFO 에서 'Additional Modules'에 'sql_relay'이 추가 되어 있는지 확인합니다.

#############################################################################################
<?php
//dl("sql_relay.so");
$con = sqlrcon_alloc("localhost", 9000, "", "[SQL Relay 접속 ID]", "[SQL Relay 접속 Password]", 0, 1);
$cur = sqlrcur_alloc($con);

if(!sqlrcur_sendQuery($cur, "select * from [DB Table]")) {
        echo sqlrcur_errorMessage($cur);
        echo "\n";
}
sqlrcon_endSession($con);
for($row=0; $row<sqlrcur_rowCount($cur); $row++) {
        for($col=0; $col<sqlrcur_colCount($cur); $col++) {
                echo sqlrcur_getField($cur,$row,$col);
                echo ",";
        }
        echo "\n";
}
sqlrcur_free($cur);
sqlrcon_free($con);
?>
#############################################################################################


 
  웹에서도 정상적으로 결과가 나온다면 SQL Relay가 정상적으로 설치 및 작동되는것입니다.
 

크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. 저도 죽는 현상이 일어 납니다. 셋팅 문제인거 같은데, 어디가 문제 인지 모르겠네요.

    2010/11/15 21:36 [ Permalink : Modify/Delete : Reply ]
  2. sqlrelay.conf 파일에서 instance 설정시 addresses="0.0.0.0" 으로 설정 추가해보시길 바랍니다.
    전 이렇게 해결했습니다.

    2010/11/15 21:42 [ Permalink : Modify/Delete : Reply ]

강좌&TIP/PHP2008/03/27 07:24

현재 NMail 을 정품을 구매해 사용중입니다.

얼마전에 NMail 사이트의 Q&A 에 '스팸 편지'가 아웃룩으로 받아지는것을 막을 방법이 없는지 문으했었습니다.

대답은 메일코어쪽 까지 수정해야되서 처리 할수가 없다는 답변이었습니다.

그래서 고민 끝에 메일을 받을때 개인 필터를 적용하는 방법을 생각해 봤습니다.

처음에는 클론으로 1분마다 스팸 포인트가 1.5 이상인 것을 자동 삭제 또는 지운 편지함으로 이동시키게 만들었는데 서버 부하도 크고 1분 사이에 메일을 긁어갈 경우가 있어서 좋은 방법이 아니더군요 .(정말 무식한 방법 ㅠ.ㅠ)

그 다음 생각한게 서버에서 모니터링을 하다보니 filter.sh.php 가 메일이 받아지면 실행 된다는 것을 알게되었습니다. 필터를 쓰도록 옵션을 설정한 사람만 해당 필터가 작동하는 듯 하더군요 .

그래서 수정을 해봤습니다. 적용후 궁금한 사항은 리플로 남겨주세요.

1. Nmail PHP 2.3.1 버전에서 만들어진 소스입니다.
2. /NMail 설치된 폴더/nmail/filter.sh.php를 vi 나 다른 에디터를 통해 수정모드로 갑니다.
3. line 12 or 13 줄에 있는 $exitcode = mail_filter(true, $G_SYS[VIRUS_SCAN]); 와 다음 줄의 exit($exitcode); 를 확인합니다.
   ( * 확인해보니 $exitcode = mail_filter(true, $G_SYS[VIRUS_SCAN]); 이 함수가 동작후 메일이 DB에 등록되고 각 개인별 폴더로 이동 됩니다. )
  
4. exit($exitcode); 바로 윗줄에 다음과 같은 소스를 추가합니다.

// 스팸 편지 이동 필터 by Choi hyun pil - 2008.03.26 - 시작
  // 아래 설정은 '스팸메일 설정' -> '상세설정' 에있는 "안티스팸메일에서 제목에 [FAKE]가 붙는 위조메일은 바로 삭제.(권장)" 라는 항목을
  // "[FAKE]가 붙는 위조메일은 바로 삭제 및 [스팸편지함]에서 스팸포인트(SP)가 1.4 이상일때 [지운편지함]으로 이동." 으로 내용을 변경후 사용.
  // 여기서 1.4 포인트는 수정 가능합니다.
  // 해당 파일은 /Nmail설치폴더/nmail/skin/webmail/사용중인스킨명/spam_config.html 임
  // 이를 적용시 서버에 부하가 증가할 수 있습니다. 이로 인해 발생하는 문제에 대해서 책임지지 않습니다.
  // * 500명까지 테스트 완료
  $move_spam_point = "1";                                             // 이동의 기준이될 스팸 포인트를 입력하세요. 해당 포인트 초과시 지운편지함으로 이동. Default : 1.4
  $tmp = explode('@', trim($_SERVER['argv'][3]));                     // 받는사람 메일주소를 획득
  $user_id = $tmp[0];                                                 // 받는사람 ID 추출
  $user_domain = $tmp[1];                                             // 받는사람 Domain 추출
  $tmp = explode("/", $_SERVER[argv][1]);                             // spool에 있는 메일의 파일이름경로를 획득
  $mf_filename = basename($_SERVER['argv'][1]);                       // 메일 파일명 추출
  // sc_fake_del 이 "Y"인 사용자 인지 확인.
  $sql = "select
            A.m_no, A.m_id , A.m_mail_file_group , A.d_no
          from
            nmail_member A,
            nmail_spam_config B,
            nmail_domain C
          where
            C.d_name = '".$user_domain."' and
            A.m_no = B.m_no and
            B.sc_fake_del = 'Y' and
            A.d_no = C.d_no and
            A.m_id = '".$user_id."'";
  $result = mysql_query($sql);
  $user_rows = mysql_fetch_array($result);
  if ($user_rows) { // "Y" 일경우 실행
    // 해당 메일정보(메일 ID 및 스팸 포인트)를 읽어옴
    $sql = "select mf_no, mf_filename, mf_spam_point from nmail_mail_file_".$user_rows[d_no]."_".$user_rows[m_mail_file_group]." where m_no = '".$user_rows[m_no]."' and mf_filename = '".$mf_filename."' limit 0, 1";
    $result = mysql_query($sql);
    $mail_rows = mysql_fetch_array($result);
    if ( $mail_rows ) { // 메일이 존재할 경우 실행
      if ( $mail_rows[mf_spam_point] >= $move_spam_point ) {          // 스팸 포인트가 높은지 확인
        $user_tmp_dir = get_mail_dir( $user_rows[m_mail_file_group], $user_id, $user_domain).'/tmp/'.$mf_filename;
        errorlog($user_tmp_dir, 'DEBUG');                             // 사용자 폴더를 제대로 알아냈는지 weblogs/debug 에 기록을 남김.
        rename($_SERVER['argv'][1], $user_tmp_dir);                   // rename 시 에러가 생긴다면 copy 해도 무관함.  반송메일은 자동삭제되기 때문.
        // 메일을 리턴메일없이 반송한 것으로 간주함. (smail- 로그에 기록이 남지 않는 단점이 있음.)
        $exitcode = 4;
        // 해당 메일폴더를 지운편지함(trash)로 변경
        $sql = "UPDATE nmail_mail_file_".$user_rows[d_no]."_".$user_rows[m_mail_file_group] . " SET mb_id = 'trash' WHERE m_no='". $user_rows[m_no] . "' AND mb_id='spam' AND mf_no = '".$mail_rows[mf_no]."'";
        db_query($sql);
      };
    };
  };
//스팸 편지 이동 필터 by Choi hyun pil - 2008.03.26 - 끝

현재 적용후 사용중인데 아주 만족 스럽습니다. ^^

만약 $move_spam_point 를 1로 설정하시면 [SPAM]으로 붙어서 스팸편지함으로 가는 메일은 모두 지운편지함으로 이동합니다. 즉 아웃룩에서 하나도 안받아지게 되죠 ^^
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

강좌&TIP/PHP2005/11/04 12:49
자료실형 게시판이나 다른 파일 업&다운로드 게시판의 경우에

각파일에 대한 사이즈를 많이 체크합니다.

이때 필수적으로 파일사이즈를 표시합니다.

저같은 경우 예전에 아래와 같은 함수를 제작해서 사용했습니다.

하지만....... 역시 사람은 머리가 좋아야 되나 봅니다..

프로그래머는 특히 수학을 잘해야되네요 ㅠ.ㅠ

아래 두소스를 참고해보세요
function GetFileSize($path) {
$filesize = filesize($path);
$unit = "bytes";

if ($filesize > 1024) {
$filesize = ($filesize / 1024);
$unit = "kB"; }
if ($filesize > 1024) {
$filesize = ($filesize / 1024);
$unit = "MB"; }
if ($filesize > 1024) {
$filesize = ($filesize / 1024);
$unit = "GB"; }
if ($filesize > 1024) {
$filesize = ($filesize / 1024);
$unit = "TB"; }

$filesize = round($filesize,0);
return $filesize." ".$unit;
};


//파일 용량 구하기 및 각 단위로 자동 변환기
function Change_Size_Unit($File)
{
//파일명에서 파일 사이즈를 바이트 단위로 추출
$Size = filesize($File);
$FileSizeUnit = array("Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");
return round($Size/pow(1024, ($i = floor(log($Size, 1024)))), 2) . $FileSizeUnit[$i];
};
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. 여기다 쓰시면 어떡해용~~~ KDIV게시물에 쓰셔야죵 ^^;;;

    파일명을 출력하고싶은곳에 $This_File_Name[$This_Print_Image_Num] 이변수를 넣으시면됩니다.

    2005/12/23 00:32 [ Permalink : Modify/Delete : Reply ]

강좌&TIP/PHP2005/05/24 22:36
파일명의 확장자를 구하는 함수이다.

너무 간단한걸 함수로 만드는게 아니냐고 하지만...

만들어 놓으면 편하다 ㅡㅡ;;;

파일 확장자 구하는 방법은 여러가지가 있다.
explode 와 array_pop 를 사용하는경우
pathinfo 또는 strrpos 등 이다..

하지만 여기서는 개인적으로 더 간단하다고 생각되는
preg_match 를 사용해서 함수를 만들었다.

#############################################################
# 파일명 확장자를 구하는 함수
# Programmer : 최현필(KumRyung) - 2005.05.24
#############################################################

function GetExtName($FileName)
{
// $FileName 의 가장 마지막 . 이후의 부분을 구해온다.
preg_match("/\.[a-zA-Z0-9_]+$/",$FileName,$Result);

// 위의 결과값에서는 . 이 포함되기 때문에 .을 빼준다
return str_replace(".","",$Result[0]);
};
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. jeonga// explode 경우 a.b.c.gif 같은경우를 대비해 항상 count 를 해서 해당 카운터에서 -1한다음 가져와야되지... 그런걸 계산안하는 부분도 있고, 확장자에 특문이 들어가있는경우까지 체크가능하기때문에.. 이렇게 만들었지. ^^;;

    2005/06/03 15:50 [ Permalink : Modify/Delete : Reply ]

강좌&TIP/PHP2005/05/24 22:15
파일 업로드시 파일명을 체크하는 함수이다.

아래의 함수는 오직 숫자와 영문으로만 이루어진 파일에한해

true를 리턴한다.

#############################################################
# 파일명 비교 함수(특수문자 및 한글 포함시 False 리턴)
# Programmer : 최현필(KumRyung) - 2005.05.24
#############################################################

function ChkFileName($FileName)
{
// 혹시나 있을 시작과 끝의 공백 제거...
$filename = trim($FileName);

// 숫자와 영문 그리고 . 이외의 문자가 있는지 체크
preg_match('/[0-9a-zA-Z.]+/', $FileName, $Result);
// 참고 : ( ,) , [ , ] 를 파일명에 포함하고 싶을 경우
// '/[0-9a-zA-Z.\(\)\[\]]+/' 이 정규식을 사용하세요!

// 체크한 결과값이 업로드한 파일명과 같은지 체크
if( $Result[0] == $FileName )
return "true"; // 같다면 True
else
return "false"; // 다르다면 False
};
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

강좌&TIP/PHP2005/05/18 17:29
자 PHP도 다른 C 나 JAVA 처럼 Hello World 부터 찍고 시작하자..
(솔직히 C 나 자바처럼 PHP는 Hello World 가 중요하지는 않다...ㅡㅡa)

우리가 웹페이지에서 PHP를 사용하기 위해서는 '내가 지금부터 PHP를 쓸꺼야~~'
라는 표시를 해줘야 한다... 물론 다쓰면 '나 다썻어~'라고도 표시해야 된다.

그 역할을 하는게 로, 각각 PHP의 시작과 끝을 나타낸다.

이제 간단하게 Hello World 를 출력해보자.

01: <?
02: echo "Hello World";
03: ?>

(*위의 01: ,02: ,03: 은 줄수를 나타내는것 뿐이다. ㅡㅡ;)

01번째 줄과 03번째 줄은 PHP 스크립트의 시작과 끝을 알려준다.
(*이 라인은 처음이자 마지막 설명이다. 다음부터는 이런 설명 생략!!!)

이제 02번째 라인을 보자.. 딱 echo 가 눈에 보일것이다.
echo 는 간단하게 "" 안에 있는 내용을 웹페이지에 출력해주는 역활이다.
(*C에서의 printf() 와 같은 역활 -0-;)

여기서 중요한것이 반드시 마지막에 ;를 해줘야 된다.
; 는 한명령의 끝을 나타내는 것으로 안하면... 당연히 에러난다..
PHP를 프로그래밍 하다보면 저 썩을(--;) ';'때문에 오류가 나는경우가 간간히 있다...
(아니 자주있다. ....Orz...)

어때 간단하지???


PS> echo에 대해 자세히 알고싶을 경우 echo <= 를 클릭!
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. 금룡성 밥줄 뺐기는거 아녀~

    2005/05/18 23:35 [ Permalink : Modify/Delete : Reply ]
  2. jeonga// 만만한 단어지 ^^;;;;;;

    2005/06/03 15:50 [ Permalink : Modify/Delete : Reply ]
  3. 윈도우 API책 보면서 "HELLO WORLD" 못본거 없음...심지어 학원 강의 자료에도.....

    2005/09/10 12:21 [ Permalink : Modify/Delete : Reply ]
  4. ewga

    에.. 끝에 ; 때문에 오류나는 것은 php뿐이 아닙니다. ㅠ.ㅠ..어엉

    2011/04/22 15:19 [ Permalink : Modify/Delete : Reply ]

강좌&TIP/PHP2005/05/18 16:57
강좌에 들어가기에 앞서.. 이 강좌는 최소한 HTML을 이용한 간단한 웹페이지를 만들어 봤다는 전제하에 강좌를 진행하겠다..
'난 HTML이 먼지 모르는데요?'라고 하는 사람이 있다면.... Alt + F4 를 해서 이창을 닫고 HTML부터 공부하고 오기를 바란다.

자 이제 본격적인 강좌를 해보기 전에~~~
뭐 이리 서론이 기냐구?? 일단 기본적인건 알아야되지 않겠어?

Client Side ScriptServer Side Script 이 두가지다.

간단히 말해서 Client Side Script는 우리 컴퓨터에서 직접 실행되는 언어이고,
Server Side Script는 서버에서만 실행이 되는 언어이다.
예로 HTML 이나 JavaScript는 Client Side Script이며,
우리가 지금부터 공부할 PHP나 ASP, JSP 등은 Server Side Script 이다.

즉, PHP를 실행하기 위해서는 서버가 반드시 필요하다.

만약 개인서버나 혹은 계정이 없는 사람은 자기 컴퓨터를 서버로 만들어서 사용할수가 있다.
서버를 설치하는 방법은 http://www.apmsetup.com/?ct=17 이곳을 참고하면 쉽게 PHP 서버를 만들수 있다.

이제 PHP가 어떤언어 인지도 알았고.. PHP를 연습해볼 서버도 준비가 됬다.
그럼 다음 강좌부터 본격적으로 PHP를 배워보자~~

*PHP를 공부하는데 알아두면 좋은 사이트!
1. http://www.phpschool.com : PHPer라면 매일 들리는 사이트
2. http://www.php.net/manual/kr/index.php : PHP 함수 메뉴얼
크리에이티브 커먼즈 라이센스
Creative Commons License
블로그코리아에 블UP하기   믹시' 믹시
Posted by 금룡이

Leave your greetings.

  1. 궁그니르

    유용한 글을 발견했군요. 감사합니다.

    2009/03/14 18:46 [ Permalink : Modify/Delete : Reply ]