PHP를 시작하기에 앞서.. 준비할 사항 (1)

PHP 강좌
Name
Subject
PHP를 시작하기에 앞서.. 준비할 사항 (1)
PHP를 시작하기에 앞서.. 준비할 사항 (1)

PHP를 실행할 수 있는웹서버가 필요합니다.

리눅스 또는 유닉스 계정을 가지신분은 상관없지만.. (만약 그 서버에 PHP가 깔린 상태라면)

계정이 없으신 분은 웹서버를 구하시거나 아니면 자신의 컴퓨터에 웹서버를 만들어야 합니다.

웹서버니 유닉스니 하는 말을 모르시는 분과 웹서버를 가지고 계시지 않은 분은 다음 절차에 따라

자신의 컴퓨터에 웹서버를 설치하십시오. (권장)

(지금 설치하는 프로그램 외에 APM 자동 설치 프로그램 어느것을 사용해도 상관없습니다.)

1. 다운로드 (클릭하여 설치파일을 다운로드 받습니다.)

2. ZIP으로 압축된 파일을 압축해제합니다. (readme.txt 와 APM_Setup.EXE 파일이 들어있음)

3. APM_Setup.EXE 파일을 더블 클릭합니다.

* Next를 누릅니다.

* 한번 쭈욱 읽어보고는 Next를 누릅니다.

* 자 인스톨 준비가 되었으니 Next를 눌러서 인스톨을 시작합시다.

* 인스톨중이네요..^^

* 인스톨이 다 되었습니다. Finish를 누르세요..

이제 우리의 컴퓨터는 하나의 웹서버가 될 준비가 다 되었습니다.

준비가 되었단 말은 아직은 웹서버가 아니란 말입니다. ^^

자 그럼 이제 우리의 컴퓨터를 웹서버로 만들어 볼까요?

이 프로그램을 인스톨하고 나면 아마 바탕화면에 세 개의 아이콘이 생겼을 겁니다.

* OK!Start Group (기본적인 바로가기 아이콘이 있는 곳, 아파치 시작,끝 MySQL 시작,끝 등)

* Start MySQL (MySQL 시작하기 )

* Start Apache ( 아파치 시작하기 )

시작하는 방법은? Start MySQL 누르고 Start Apache 누르면 됩니다. (순서는 상관없음)

성공적으로 설치가 되었다면 다음과 같은 창이 하나 뜹니다. (절대로 닫으시면 안되요..)

이 창이 떠 있다는 것은 이제 우리 자신의 컴퓨터가 웹서버가 되었다는 것을 의미합니다.

단, 창에 나타나는 글자는 버전정보 이므로 다소 틀리게 나올 수 있습니다.

그리고 NT에 설치한 경우 번거롭게 창을 띄울 필요없이 서비스라는 것에 등록하여

부팅과 함께 자동으로 실행할 수 있습니다.

바탕화면에 생긴 아파치 그룹 디렉토리에 보면 Apache랑 MySQL에 각각 NT 서비스 인스톨이라는게

있으니 그걸 더블클릭하시면 다음 부팅부터 자동으로 시작됩니다. (단 NT/Win2000에서만..)

그러면 이제 인터넷 익스플로어나 넷스케이프같은 웹 브라우저를 실행시켜서

주소창에 http://localhost 라고 쳐 보세요..

이런 비슷한 화면이 뜨면 인스톨이 성공한 것입니다. ^^

위 프로그램의 디렉토리

C:\mysql ( 데이터베이스 디렉토리)

C:\APM_Setup ( 아파치 및 PHP 관련 디렉토리 )

이 두 디렉토리가 생깁니다.(버전에 따라 더 생길수도 있음) 자세히 보시면..

C:\APM_Setup\htdocs 디렉토리가 홈디렉토리(홈페이지의 파일들이 있는)입니다.

여기다가 홈페이지를 만들 때 처럼 HTML 문서나 이미지 파일 등을 넣어두시면

localhost 라고 쳤을 때 보이게 됩니다.

( localhost라는 것은 자신의 컴퓨터라는 뜻으로 다른 사람에게는 적용되지 않습니다. )

이제 테스트도 끝나고 했으니 웹서버를 닫아 봅시다.

좀전에는 start 머머를 눌렀으니 이제는 stop 머머 를 누르면 되겠죠?

C:\APM_Setup\APM_Setup\MySQL\... 디렉토리에 Stop MySQL.을 실행하여 MySQL을 멈추고

C:\APM_Setup\APM_Setup\Apache\... 디렉토리에서 Stop apache를 실행하세요^^

그러면 좀전에 떠 있던 창이 자동으로 닫혀집니다.

(NT 서비스로 등록하신분들은 별도의 작업이 필요없습니다.제어판->관리도구->서비스 에서 종료할 수 있습니다.)

굉장히 많은분이 PHP는 어떻게 테스트 하나요 하고 질문해 오셔서 이렇게 인스톨 가이드를 만들었습니다.

이 방법이 유일한 것은 아닙니다.

내일은 PHP를 시작하기에 앞서.. 준비할 사항 (2) 가 이어집니다

Prev
PHP를 시작하기에 앞서.. 준비할 사항 (2)
다운군


PHP를 시작하기에 앞서.. 준비할 사항 (2)

Name
Subject
PHP를 시작하기에 앞서.. 준비할 사항 (2)

PHP를 시작하기에 앞서.. 준비할 사항 (2)

PHP는 무엇으로 프로그램을 짜느냐?

단도 직입적으로 말씀드리면 텍스트에디터만 있으면 됩니다.

텍스트에디터란 말 그대로 글을 쓰고 수정하고 저장할 수 있는 프로그램을 말합니다.

즉, 메모장 같은 프로그램을 말합니다. ( 겁나게 둘러서 말했군요..^^ )

그런데.. 메모장은 소스가 짧을 때는 고치기 쉽지만..

소스가 굉장히 길어지면 상당한 불편을 느끼게 됩니다.

그러면 어떤 텍스트 에디터가 좋은 에디터인가?

이 문제는 한마디로 말씀드리기가 정말 힘듭니다.

왜냐하면 프로그래머마다 취향이 약간씩 다르기 때문이지요.

많은 프로그램을 이용해 보고 자신에게 맞는 프로그램을 찾는게 제일 좋은 방법입니다.

1. 찾기와 찾아서 고치기 기능이 있는 에디터

2. 구문 강조 기능이 있는 에디터 ( 구문 강조는 함수 명령등을 다른 색깔로 자동 표시해주는 기능을 말합니다. )

3. FTP 연결을 통한 수정, 저장 기능이 있는 에디터

4. 실행 취소와 다시 실행이 횟수에 상관없이 자유로운 에디터

5. 소스 앞에 몇 번째 줄인지 표시가 되는 에디터

이 다섯가지 기능을 가진 에디터라면 PHP 프로그래밍을 하는데 어떤 무리도 없을 것입니다.

가장 많은 사람이 쓰는 텍스트에디터는 무엇일까?

제가 뭐 시장조사를 해본 것은 아니지만..

울트라 에디트 (Ultra Edit) 란 프로그램이 가장 많은 사람이 애용하는 프로그램인 것 같구요,

에디트 플러스 ( EditPlus) 란 국산 프로그램도 굉장히 많은 인기를 끌고 있습니다.

(참고로 저는 울트라 에디트 보다는 에디트 플러스가 맘에 들더군요..^^ )

텍스트에디터 설치 및 세부 설정 방법

저는 에디트 플러스를 쓰기 때문에 에디트 플러스에 대해서만 말씀드리겠습니다.

다른 프로그램도 쉽게 인스톨해서 쓸 수 있으니 취향에 따라 골라서 써보도록 하세요^^

참고로 에디트 플러스는 쉐어웨어입니다. ( 정품 등록시 29,700원 )

다음 절차에 따라 에디트 플러스를 인스톨 합니다.

1. 다운로드 1 , [image] 다운로드 2 둘 중에 아무거나 다운로드합니다.

2. ep2setup.exe 란 파일을 더블 클릭합니다. ( 다운로드된 파일, 약 910kb )

setup을 눌러 인스톨을 시작합니다.

언어를 선택합니다. ^^ 영어가 익숙하신 분은 영어로..~ ^^;;;;

사용권 계약서를 한번 읽어봅니다. ^^ 저기 평가와 등록에 뭔가 써있네요.. 무료 소프트웨어가 아니라고..

동의 하시면 예를 누릅니다.

설치할 디렉토리는 자동으로 program Files 디렉토리로 지정됩니다. 다른 디렉토리로 저장하시려면

설치 디렉토리를 바꾸면 되겠죠?

( 근데 왠지 저의 속살을 보인 기분이 드네요.. ^^;;; 알집, 데이터맨. ^^;;; 별개 다 깔려있네.. ^^ )

윈도우 메뉴에 등록하는 부분입니다. 저는 이미 깔려 있어서 이미 보이네요..^^

( 이번에도 속살을... ^^ )

이제 설치가 되었습니다.

설치가 되면 다음과 같은 화면이 뜹니다. 물론 저기 머 빨간색.. 말은 안뜨겠져??? 저는 이미 사용중이니..^^

자 그럼 이제 설정에 들어가 보도록 하겠습니다.

저는 원래 디폴트 설정보다 많이 바꿔서 쓰고 있는데..

대부분이 저의 개인적 성향에 따른거라 한가지만 추가 설정하시면 될겁니다..^^

설정에 앞서서 파일하나를 만들어 보도록 하죠..

그림과 같이 보통 문서를 선택합니다.

(단축키 몇 개는 좀 외워두시는 것이 훨씬 편리할 겁니다. 스타크래프트 단축키의 반만 외워도 충분^^ )

보통문서를 누르면 하얀색 창이 뜨는데.. 거기다가 위 그림과 같이

<?php #머시기 저시기 ?> 라고 씁니다..

그리고 위에 디스켓 모양의 버튼이나 컨트롤 + S 를 눌러 저장을 합니다.

저장시 Editplus 2 라는 디렉토리에 저장하게 되는데..

파일 이름을 template.php3 라고 정해 저장합니다.

저장했으면 에디트 플러스 메뉴에 있는 도구에 보면 기본 설정이라는 메뉴가 있습니다.

기본 설정을 누르면 아래와 유사한 창이 뜨는데..

파일의 문서 템플릿을 선택한 뒤 추가 버튼을 눌러서 메뉴 제목란에 PHP라고 적습니다.

그리고는 파일 경로 오른쪽에 있는 ... 버튼을 눌러서 좀전에 만들어둔 template.php3 파일을 선택합니다.

위와 같이 설정하고 나면 다음과 같이 새 파일에 PHP라는 메뉴가 생기게 됩니다.

다음부터 PHP 문서를 만들 때는 저 메뉴를 선택해서 작성합니다.

그러면 함수부분 등이 구문강조가 되어 프로그램 짤 때 보다 쉽고 편리하게 작성할 수 있게 됩니다.

에디트 플러스에는 많은 기능이 있는데..

이 기능들은 한번씩 써보면 쉽게 익힐 수 있으니 아무거나 한번씩 눌러보면서

무얼 하는 기능인지 한번 확인해 보시기 바랍니다.

이제 텍스트 에디터를 다 깔았는데 그 다음은 어떻게 하죠?

이제 위에서 만든 PHP 메뉴를 이용해 거기다가 소스를 적어가면 됩니다.

저장할 때는 파일의 확장자가 php3 이나 html 로 저장합니다. ( 예) test.php3 , test.html 등등

텍스트 에디터로 저장한 PHP 문서는 어떻게 테스트를 할 수 있나요?

내일 이 궁금증을 풀어 드리겠습니다. ^^

다들 안녕히 계세여~

IP Address : 210.206.74.199

Prev
PHP를 시작하기에 앞서.. 준비할 사항 (3)
다운군
Next
PHP를 시작하기에 앞서.. 준비할 사항 (1)


PHP를 시작하기에 앞서.. 준비할 사항 (3)

Name
Subject
PHP를 시작하기에 앞서.. 준비할 사항 (3)

PHP를 시작하기에 앞서.. 준비할 사항 (3)

이제 테스트를 위한 환경이 모두 만들어 졌습니다.

프로그래밍을 할 에디터도 하나 구했고..

짠 프로그램을 테스트할 웹서버도 깔았습니다.

그럼 오늘은 직접 짠 소스를 테스트 해봐야겠죠?

이미 깔려진 APM 프로그램을 띄웁니다. ( apache start , MySQL start )

웹 브라우저에 localhost 라고 치면 아래와 같이 나옵니다.

자 이제 이 파일을 고쳐 보겠습니다.

디폴트로 설치하셨다면 C:\OkStart Group\htdocs 디렉토리가 홈디렉토리가 됩니다.

저 디렉토리로 한번 가볼까요?

index.html 이라는 파일이 있죠? 이 파일이 기본적으로 세팅되어 있는 시작파일입니다.

http://localhost/index.html 의 경로를 가지지만 기본 세팅상에서

http://localhost/ 라는 디렉토리만 쳐도 자동으로 index.html 이 인식됩니다.

http://localhost/test/index.html 은 http://localhost/test/ 와 똑같은 결과를 가져옵니다.

이해가 되시죠??

그럼 본격적으로 이 파일을 고쳐보도록 하겠습니다.

에디터에 저 파일을 불러 들입니다. ( 위와 같이 되겠져? )

위에 쓰여진 많은 글자들을 다 지워 버리고.. 아래와 같이 적습니다.

<? echo "첫번째 프로그램";<br> echo "아싸~";
echo "날짜 : " . date("Y-m-d");
?>

자 결과는?

음... PHP가 잘 돌아 가는 군요...

(두줄로 나오는건 창의 크기가 작아서입니다. 원래 한줄로 보임)

PHP 세상에 오신걸 환영합니다.

이제 여러분은 PHPer가 되셨습니다.

기분이 어떠신가요?

들뜨시나요? ( 아주 좋은 마음가짐입니다. )

조금 두려우신가요? ( 절대 두려워 할 것이 못됩니다. 자신감을 가지세요 ^^ )

PHP는 많이 어려운가요?

PHP는 어렵고 난해한 프로그래밍 언어가 아닙니다.

절 아는 사람들이 가끔 저에게 이렇게 질문을 하곤 합니다.

"PHP가 좋다던데 어떻게 공부하느냐... 어떤 책이 좋으냐...?"

제가 생각하기에는 공부 방법이나 책 어느 것도 그리 중요하지 않다고 봅니다.

제 주변의 많은 분들도 그저 저의 말에 따라 책만 사놓고 몇페이지 보다가는

" 어려워서 못하겠다.." 고 포기하고 말더라구요..

이런 분들은 PHP가 정말 어려워서가 아니라 시작할 때부터 맘에 두려움을 가지고 시작했기 때문입니다.

제가 " 자신감을 가지고 한번 무작정 도전해 보세요~ PHP는 정말 쉬워요.. " 하고 말을하면

정말 많은 사람들이 "원래 어느 정도 터득한 사람은 항상 저렇게 말하곤 한다" 며 고개를 저어대곤 했습니다.

물론 컴맹이 PHP를 바로 시작하는 것은 불가능하죠..

기본적인 툴도 다룰줄 모르는데 프로그래밍이라니..

그러나 컴퓨터를 좋아하고 컴퓨터와 친하게 지내는 사람이라면 충분히 소질이 있다고 생각하시면 됩니다.

PHP는 누군가 가르쳐주는 것을 익힌다고 되는 것이 아닙니다.

PHP는 자신이 스스로 공부하는 것입니다.

가끔 질문하시는 분들을 보면 하나에서 열까지 모두 가르쳐주기를 바라는 분들이 계십니다.

좀 냉정하지만 이런 질문은 거절합니다.

제가 PHP를 처음 시작했을 때 너무 모르는게 많아서 무작정 사람들에게 물어 보기 시작했습니다.

이게 머예요? 저게 뭐예요? 하는 식으로요..

메일도 보내보고 게시판에 글도 써봤지만 답변을 잘 안해 주시더라구요..

저는 그래서 오기로 이책 저책 찾아보고 인터넷도 뒤지고 하면서 나름대로의 해답을 찾았습니다.

그러고나서 사람들에게 다시 질문했죠..

"이건 어떤 원리인거 같은데 저는 이렇게 했거든요. 그런데 잘 안되네여. 혹시 이런 이유 때문인가요?"

이렇게 질문하니까 아주 친절한 말투로 질문한지 얼마 지나지 않아 답이 오곤 했습니다.

제가 어느정도 자신감이 생기고 누군가의 질문에 답을 할 수 있는 위치가 되었을 때..

누군가가 제게 "이게 머예요?" 하고 물었습니다.

처음에는 상세히 알려주곤 했는데..

시간이 지나니까 좀 짜증이 나더군요..

누워서 얻어먹으려고만 하는 것 같아서요..

제가 이야기 하나 해드리죠.. 언젠가...

제 친구 중에 한명이 PHP를 한다고 하루종일을 꼬박 컴터 앞에 앉아 있더라구요..

옆에 보고 있기가 뭐해서 도와줘야지 하고 친구에게 갔는데..

자기가 물어 볼 때까지는 어떤 도움도 주지 말라고 당부를 하더군요..

그래서 그냥 옆에서 친구가 하는 것을 물끄러미 보고만 있었는데..

밤이 늦어서야 질문을 하더라구요.. 도저히 왜 안되는지 모르겠다고..

그런데 그 녀석 끝까지 고집이더군요.. 해답은 싫으니까 힌트만 달라는 거 있죠..

그 녀석은 이틀만에 광소(정말 광소였음.. ㅡㅡ;; 뽀하하뿌헤헤크크헤케케 ㅡㅡ;;;; )를 터트렸습니다.

3일째 되던 날부터 인터넷에서 자료를 찾아서 MySQL 공부를 하더니..

MySQL을 이용한 북 마크 프로그램이라면서 제게 보여주더군요..

담번엔 방명록을 만들겠노라 하면서 말이죠..

저는 그녀석이 천재라고는 생각지 않습니다. (절대 아니죠 ㅡㅡ;; )

그 녀석은 그저 남들보다 PHP를 하고 싶은 열정이 많았을 뿐입니다.

PHP를 모두 배우는 데에는 정말 많은 시간이 듭니다.

한달 두달 가지고는 어립 반푼어치도 없죠..

그러나 왠만한 프로그램 하나 짜는데에는 그리 많은 시간이 필요 없습니다.

그러나 누워서 받아먹기만 하는 사람은 스스로 공부하는 사람보다 몇배 또는 몇십배 차이가 나겠죠.

오늘은 정말 사설이 길었습니다.

실질적으로 PHP 뿐만이 아니라 다른 언어나 스크립트도 마음가짐이 제일 중요합니다.

위에 예를든 친구 말고도.. 지금 제 홈페이지에 있는 게시판을 만드는.. ICAN 이란넘도..

몇 달 전만해도 PHP가 어려울거 같아서 손도 못대던 넘이었습니다.

제가 하도 PHP 공부좀 해라 해라 해서 마지 못해 시작하더니..

며칠 있다가 "PHP 정말 쉽네..." 라고 하더라구요..

아마 지금이 PHP 배운지 두달정도? 많아도 3달 될까 말까 할겁니다.

여러분도 자신감을 가지고 열심히 해보세요..

분명 좋은 결과가 있을겁니다.

다음시간에는 프로그래밍을 다시 시작하겠습니다.

다음 시간에 뵈요..

Prev
PHP 입문
다운군
Next
PHP를 시작하기에 앞서.. 준비할 사항 (2)


PHP 입문

Name
Subject
PHP 입문

PHP 입문

HTML 밖에 모르는 웹 브라우저 ?

HTML밖에 모르는 웹 브라우저라.... (물론 약간은 틀린 말입니다.)

바꿔서 말씀드리면 웹 브라우저는 HTML밖에 알아 듣지 못한다는 소리입니다.

HTML이 브라우저가 쓰는 언어라는 것이지요(요즘 브라우저는 약간의 외국어(자바스크립트 등)도 합니다.^^;;)

그래서 우리가 홈페이지를 만들려면 모든 문서를 HTML로 작성해야만 합니다.

HTML을 울려 버린 CGI의 등장

인터넷 초창기에는 대부분의 홈페이지가 모두 HTML로 만들어져 있었습니다. (선택의 여지가 없었죠)

HTML로 홈페이지를 만들어 보신 분은 아시겠지만 ...

HTML은 일방향적이고 수정하기 전에는 절대 변하지 않는 특성을 가지고 있습니다.

이러한 단점 때문에 사람들은 HTML 말고 다른 무언가가 필요함을 느꼈습니다.

그래서 생겨난 것이 바로 CGI (Common Gateway Interface)입니다.

CGI는 위와 같은 구조를 가지는데.. ( HTML은 1과 4의 과정만 있음 )

보시는 바와 같이 HTML 보다 한단계 더 처리를 함으로써 계산과 처리 기능이 추가되었습니다.

이로인해 우리는 정적인 변화 없는 웹 페이지에서 변화가 자유롭고 방문자와 홈페이지 제작자간에

서로 상호작용이 가능한 웹 페이지를 만들 수 있게 된 것입니다.

그러나 여기서 주의해야 할 점은 3번에서 보듯이 CGI로 처리된 값은 HTML로 전송되어 집니다.

웹 브라우저는 HTML밖에 모르니 HTML로 바꿔서 보여줘야 하는 것입니다.

( PHP를 하려면 당연히 HTML을 알고 있어야겠죠? )

그러면 CGI와 PHP는 어떤 관계인가?

PHP는 일종의 CGI라고 볼 수 있습니다.

물론 약간 다르기는 하지만요...

( 다른 점은 프로세스니 모듈이니 하는 말을 해야 하기 때문에 생략합니다. )

그래서 PHP도 저 위의 그림과 비슷한 구조를 가집니다.

HTML에 없는 계산 , 처리과정이란 도대체 어떤 것일까?

굉장히 많겠지만 지난시간에 테스트를 위해 만든 소스를 다시 이용해 보죠..

소스

<?

echo "첫번째 프로그램";

echo "아싸~";

echo "날짜 : " . date("Y-m-d");

?>

이 소스는 10월 10일날 아래와 같은 결과였습니다.

그러나 똑같은 소스를 오늘 똑같이 실행시켰는데.. 아래와 같은 결과가 나오네요..

( 어라 브라우저 모양도 바뀌었네.. ^^;; 집은 98 회사에서는 98과 윈2000을 씁니다.^^;;; 소스 때문에 바뀐게 아님)

* 마치 다음줄인것 처럼 보이지만 실제는 창의 크기가 작아서 그런것임
한줄로 나오는게 맞습니다. ^^;;;

이와같이 PHP는 사람이 바꾸지 않아도 알아서 처리하여 표시해 주는 것입니다.

여기에는 date 라는 날짜를 표시해주는 함수와 echo 라는 텍스트를 뿌려주는 함수 둘이 사용되었습니다.

그리고 소스를 잘 보시면 낯익은 HTML 코드가 포함되어 있음을 아실 수 있을 것입니다.

바로
태그이지요.

위에서 말했듯이 우리는 결과를 HTML로 돌려주어야 한다고 했습니다.

위의 결과에 대해 소스보기를 하면...

첫번째 프로그램
아싸~
날짜 : 2000-10-13

이렇게 출력되어집니다.

위의 PHP코드는 일련의 처리과정을 거쳐 PHP 코드를 모두 지워 버리고

단지 HTML 코드만을 전송한 것이지요.

만약 PHP가 없었다면....

홈페이지에 날짜 표시 기능을 달기 위해서는

매일 매일 홈페이지에 들러서 제일 먼저 오늘의 날짜를 고쳐야 하는 수고를 했을 것입니다.

( 물론 자바 스크립트로 표시할 수 있기는 합니다. 허나 약간의 차이는 있음 )

물론 게시판 같은 것은 꿈도 못 꾸었겠죠..

이제부터 고민해야 할 것...

이제부터는 PHP 함수등을 배워가면서 어떻게 그 결과를 HTML로 뿌려줄 수 있느냐를 고민하는 것

그것밖에 남지 않았군요..

오늘은 이것으로 강좌를 마치겠습니다. 다들 안녕히 계세여~

Prev
PHP 입문 2
다운군
Next
PHP를 시작하기에 앞서.. 준비할 사항 (3)


PHP 입문 2

Name
Subject
PHP 입문 2

PHP 입문 (2)

PHP는 무엇인가?

PHP (공식적 PHP Hypertext Preprocessor) 는 Server - side HTML-embedded 스크립트 언어입니다.

즉, PHP는 서버에서 실행되며 HTML을 포함한 스크립트 언어라는 말입니다.

HTML을 PHP 확장자 (php3, php 등)로 저장하여도 아무 지장없이 사용할 수 있습니다.

예제의 결과 ) http://phper.zotta.net/lect/39/example1-1.php3

위처럼 보통 HTML 태그 사이에 특별한 PHP 시작과 끝 태그를 이용하여 HTML과 PHP를 구분합니다.

1 - 5 , 7 - 8 줄까지는 HTML로 인식하고 6번째 줄은 PHP 모드로 바뀌어 처리됩니다.

PHP는 무엇을 할 수 있는가?

PHP는 가장 기초적으로 어떤 CGI 프로그램을 만들 수 있고 다이나믹한 웹페이지를 만들 수 있습니다.

무엇보다도 PHP의 가장 두드러진 특징이라고 말할 수 있는 것은 매우 다양한 데이터베이스를 지원하고

또한 데이터베이스를 이용한 웹페이지를 만드는 작업이 놀랄 만큼이나 쉬어졌다는 것입니다.

아래는 PHP가 지원하는 데이터베이스입니다. ( 엄청나게 많죠.. 자주쓰는건 다섯손가락 안에 드네요. )

Adabas D InterBase Solid dBase mSQL Sybase

Empress MySQL Velocis FilePro Oracle Unix dbm

Informix PostgreSQL

그리고 PHP는 여러 프로토콜 ( POP3 ,NNTP ,IMAP 등 )을 이용할 수 있고 네트워크 소켓도 사용할 수 있습니다.

PHP의 간결한 역사

1994 by Rasmus Lerdorf (mailto:rasmus@php.net)

( 정말 간결하죠? 그래두 핵심적인 부분이라우~ 1994년에 Rasmus 라는 사람이 맹글었음 )

오늘은 이렇게 간단하게만 하고 내일부터 PHP 기초 문법에 들어가겠습니다.

* 참고 : 강좌는 PHP 매뉴얼을 기본으로 하며 저의 의견과 여러 서적의 의견이 참고 됩니다.

Prev
PHP 기초문법
다운군
Next
PHP 입문


PHP 기초문법

Name
Subject
PHP 기초문법

PHP 기초 문법

HTML 모드에서 PHP모드로 빠져 나오기

지난 강좌에서 말씀 드렸듯이 PHP는 HTML을 포함하고 있습니다.

그렇기 때문에 이 부분이 HTML 부분인지 PHP 부분인지 구분할 필요가 있죠.

PHP 모드로 빠져 나오는 방법에는 4가지가 있습니다.

가장 간단하면서 일반적인 방법인 1번

3, 4번은 PHP 컴파일시에 추가하셔야만 쓰실 수 있습니다.

<? (PHP의 시작)
 ?> ( PHP의 끝 )

PHP에서 한 줄의 끝 구분하기

; (세미콜론) 이 그 줄의 끝임을 구분해 줍니다.

닫는 태그(?>) 에는 세미콜론(;) 이 포함되어 있다고 보시면 됩니다.

위 소스는 다음과 같이 에러 메시지를 띄웁니다.

소스 코드의 6번째 줄이 틀렸다는 소리죠.. (대부분의 경우 6번째줄이 틀렸다고 하면 5,6,7줄을 보면 됩니다.)

PHP 자체 문법 체크에서 콤마(,)나 세미콜론(;)이 빠졌을 것 같다고 알려주네요.

정말 프로그램을 짜다보면 자주 보는 에러가 아닐 수 없습니다. ^^;;

자 다음과 같이 5, 6번째에 세미콜론을 추가했습니다.

그 결과는 ....

( 에러를 보고 어느 부분이 틀렸는지를 확인하고 수정하는 작업이 아주 중요합니다.)

PHP 코드에 주석 달기 (소스 코드 설명)

PHP는 기본적으로 C와 Perl 과 같은 형식의 주석을 제공합니다.

주석 방법 | 설명
// | 한줄 주석 처리 ( 가장 일반적 )
# | 한줄 주석 처리
/* */ | 여러줄 주석 처리 ( /* 시작 */ 끝 )

주석 처리 하는 방법은 위와 같구요. 결과는 다음과 같습니다.

주석 처리된 부분은 결과에 출력되지 않습니다. ^^

주석은 소스 코드를 작성할 때 코드 옆에 설명을 붙여 놓아 나중에 디버그(수정) 하거나

새로운 기능을 추가할 때에 많은 도움이 되니..

주석을 다는 버릇을 들이시기 바랍니다.

참고로 다중 주석속에 다시 다중 주석 처리를 할 수는 없습니다.

/* 아자아자 /* 어~ 이러면 안돼~ */ 이러면 에러납니다.. */

홈페이지에 들러 강좌에 대한 의견을 주시기 바랍니다.

http://phper.zotta.net

Prev
PHP 기초 문법 - 그 두번째시간 (Type)
다운군
Next
PHP 입문 2


PHP 기초 문법 - 그 두번째시간 (Type)

Name
Subject
PHP 기초 문법 - 그 두번째시간 (Type)

PHP 기초 문법 (2)

Type

정수 , 실수 , 문자열 , 배열 , 객체

이 다섯가지 타입이 있습니다.

정수 ( Integer )

$a = 1234; # 십진수

$a = -123; # 음수

$a = 0123; # 8진수 ( 십진수의 83과 같습니다. )

$a = 0x12; # 16 진수 ( 십진수의 18과 같다 )

실수 ( Doubles )

$a = 1.234; $a = 1.2e3;

문자열 ( String )

문자열은 " " (따옴표) 안에 써넣으며 다음과 같은 특수 문자를 넣을 수 있습니다.

특수문자 | 의미
\n | 개행문자 ( 줄 바꿈 )
\r | 캐리지 리턴
\\ | 역 슬래쉬
\t | 수평 탭
\" | 따옴표
\$ | 달러 표시

위에 말씀드렸듯이 문자열은 " " 안에 들어가고 또한 PHP 자체에서 지원하는 특수한 문자들 때문에

위와 같이 \( 역슬래쉬 ) 문자를 써서 특수 문자를 표현합니다. ( 무슨 말인지 모르시겠죠? ^^;;;; )

예로 보여 드리겠습니다.

위와 같은 소스로 실행을 하게되면

위와 같이 나타납니다.

3번째 줄에 \와 5번째 줄에 " 6번째 줄에 달러 ( $ )문자가 나온게 보이시죠?

그런데.. 개행문자와 캐리지 리턴, 그리고 탭은 된 건지 안 됐는지 모르겠군요. 그쵸? ^^;;

개행문자 등은 소스와 관계된 기능들입니다.

소스를 보기 좋게 정렬하는 등의 기능을 하기 위한거죠.

그럼 HTML 소스를 보겠습니다.

HTML 소스를 보시면 확실히 개행문자가 뭔지 보이시죠? 소스가 한 줄 바뀌었습니다.

캐리지 리턴은 커서를 제일 처음으로 보내기 때문에 개행문자와 같은 효과를 내게 되었습니다.

그리고 3번째 줄에 탭 부분을 보시면 빈 공간이 보이시죠? 그것이 탭이 먹힌 자리랍니다. ^^

프로그램을 짜다보면 소스가 잘 정리되어있으면 버그 수정도 편하고 이것 저것 정말 도움이 많이 됩니다.

그러니 여러분도 조금 귀찮으시더라도 되도록이면 소스를 보기 좋게 잘 정리하세요^^

만약 따옴표가 표함되어 있는 문자열인데 역슬래쉬(\)문자를 쓰지 않았다면 어떻게 될까요?

이렇게 소스를 짜면 에러가 나게 됩니다.

왜냐하면 "와 " 사이가 문자열이라고 인식하게 되는데..

문자열 안에 따옴표가 나와서 echo "따옴표 안에 따옴표를 넣으려면" 이만큼이 문자열이라고 인식합니다.

그렇게 되면 뒤에
"; 이 무슨 말인지 PHP는 인식하지 못하기 때문에 다음과 같은 에러를 냅니다.

조금은 이해하셨나요?

이 부분은 프로그램을 짜다보면 자연히 알게 되는 부분이니 가볍게 생각하시기 바랍니다. ^^

위 소스에 대한 결과는 다음과 같습니다.

2,3,4 번을 보시면 문자열을 합치는 것을 배우실수 있을거구요.

8번부터 12까지는 따옴표 안에 변수가 들어갔을 때와 작은 따옴표 안에 변수가 들어갔을 때

어떻게 다른지 알 수 있습니다.

다음 시간에는 배열과 객채에 대해 배우겠습니다.

홈페이지에 들러 강좌에 대한 의견을 주시기 바랍니다.

http://phper.zotta.net

Prev
PHP 기초 문법 - Type (배열과 객체)
다운군
Next
PHP 기초문법


PHP 기초 문법 - Type (배열과 객체)

Name
Subject
PHP 기초 문법 - Type (배열과 객체)

PHP 기초 문법 (3) - 배열 , 객체

배열

배열을 생각할 때는 간단히 보따리라고 생각하세요..( 마땅히 떠오르는게 없어설^^;;;)

보따리에 하나이상의 물건을 넣을 수 있듯이 배열에도 하나 이상의 데이터를 넣을 수 있습니다.

우선 한번 배열이 어떻게 생겼는지 구경을 해봅시다..

그림에서 보시다시피 배열은 $a[0] 이런식의 형태입니다.

변수는 대부분 하나의 변수에 하나의 값을 갖는게 기본인데..

배열은 위처럼 a라는 변수에 abc 와 def를 가질 수 있습니다.

두 값의 구분은 [0],[1] 등으로 몇 번째에 저장되어 있나로 구분 할 수 있구요.

5번처럼 처음부터 foo라는 구분자를 주어 그 값을 구분할 수도 있습니다.

배열은 정렬을 원하는 형식에 따라 asort() , arsort() , ksort() , rsort() , sort() , uasort() , usort() ,

uksort() 함수들을 이용해 순서대로 정렬할 수 있고 count() 함수를 사용하면 배열의 원소 개수를 셀 수

있습니다.

next()와 prev() 함수를 이용하여 배열의 내용을 탐색할 수 있습니다.

배열의 내용을 탐색하는 방법으로 each() 함수를 사용할 수도 있습니다.

배열은 다차원 배열을 지원하여 $a[0][0] 식의 배열을 만들 수 있습니다.

(자세한 것은 프로그램을 짜보면서 배우도록 하겠습니다.)

객체

객체는 위와 같이 class ... 로 정의를 합니다.

객체에는 함수도 포함할 수 있고 변수도 포함 할 수 있습니다.

클래스는 객체지향 프로그래밍에서 쓰는 기본단위로..

객체지향이 뭔지 모르시는 분들이 직접 쓰기에는 다소 부담이 있습니다.

그러나 좌절(^^;;;) 하실 필요는 없습니다.

객체를 안쓰고도 충분히 프로그램을 짤 수 있기 때문이지요.

그리고 PHP 자체가 완전한 객체지향 언어가 아니기 때문에

안쓰는 것이 나쁘다고 말 할 수는 없습니다.

( 실질적으로 대부분의 소스는 객체가 거의 쓰이지 않습니다. )

그러나 요즘 추세가 객체 지향 프로그래밍 쪽으로 변하고 있기 때문에

한번씩 짜보면서 객체지향 프로그램이 어떠한 것인지 이해 하는게 좋습니다.

변수형의 변환

만약에 우리가 지금까지 배운 5가지 Type을 자신이 원하는 다른 타입으로 바꾸고 싶을 때는 다음과

같은 방법으로 바꿀수 있습니다.

$foo = (int) $bar;

  • (int), (integer) - 정수형으로 변환
  • (real), (double), (float) - 실수형으로 변환
  • (string) - 문자열로 변환
  • (array) - 배열로 변환
  • (object) - 객체로 변환

이번 시간에는 다소 설명이 자세하지 않아서 이해하기가 어려울지 모르겠습니다.

우선은 개략적으로 "아~ 그냥 배열은 이런 모양이고 객체는 이런모양이구나~" 정도만 이해 하셔도 됩니다.

실제 프로그래밍에서 만나면 확실히 이해하실 수 있을테니 오늘은 이정도로만 끝내겠습니다.

( 시간이 넉넉지 않아서 자세한 설명을 못드린점 사과 드립니다. )

Prev
PHP 기초 문법 - 변수 (1)
다운군
Next
PHP 기초 문법 - 그 두번째시간 (Type)


PHP 기초 문법 - 변수 (1)

Name
Subject
PHP 기초 문법 - 변수 (1)

7장 변수

미리정의된 변수

변수에는 우리가 만들어 사용할 수 있는 변수와 미리 정의되어진 변수가 있습니다.

우선 미리 정의된 변수는 서버 종류, 버전 등이나 기타 환경에 따라 변하는 변수들입니다.

아파치와 PHP 각각 몇 개의 변수를 지정해 놓은 상태이며 이 변수들은 우리가 인위적으로 값을

수정하거나 일반 변수로 사용할 수 없습니다.

이 변수들은 아파치 홈페이지나 PHP의 phpinfo() 함수로 확인할 수 있습니다.

가장 기본적이고 자주 쓰이는 변수는 PHP_SELF입니다.

PHP_SELF 는 자기 자신의 파일을 뜻하며 한 파일로 여러 기능을 하게 하는 문서를 만들 때 유용하게 쓰입니다.

다음은 PHP_SELF를 이용한 프로그램 소스의 일부분입니다.

변수는 항상 $로 시작하며 미리 지정된 변수든 우리가 임의로 만든 변수든 모두 $를 붙여야만 사용가능합니다.

위 소스는 폼에 임의의 값을 입력받아 자신의 파일로 그 정보를 넘기는 프로그램입니다.

다음 그림을 보시면 이해가 쉽게 가실 것입니다.

이 그림이 위의 소스를 실행한 결과입니다.

자 그럼 abc라는 값을 보내 보겠습니다. 위에서 폼의 action(정보를 보낼 문서 경로 지정)에 PHP_SELF를

썼기 때문에 자기 자신 파일로 정보(abc)를 보내게 됩니다.

첫 번째 그림에서 없던 abc라는 값이 출력되었습니다.

abc라는 값은 위의 소스에서 info라는 이름의 input 박스를 통해 넘어온 값입니다.

이 값은 $info 라는 변수에 자동 저장되므로 $info 변수를 통해서 이 값을 출력했습니다.

테스트 : http://phper.zotta.net/lect/44/php_self.php

일반적인 변수 ( 프로그래머가 임의적으로 만들어 쓰는 변수 )

변수는 앞서 말씀드렸듯이 $ 표시를 시작으로 일정의 문자열을 덧붙여 만듭니다.

그런데 달러 표시 다음에 붙는 문자열에는 아무 문자나 올수 있는게 아니라

일정의 규칙을 위반하지 않아야만 변수로 이용할 수 있습니다.

이 규칙이 위배되지 않는 문자열을 식별자라고 합니다.

즉, 식별자는 변수나 클래스 함수등의 이름으로 쓰일 수 있는 문자열이지요.

첫째, 영문 소, 대문자 , 숫자 그리고 _ (밑줄)로 이루어 집니다. 이 이외의 문자를 포함하면 에러가 나게 됩니다.

둘쨰, 소문자 대문자의 구별이 있습니다. (PHP 내장함수 제외 예) print(""); 와 Print("");는 같음)

셋째, 변수는 항상 $로 시작한다.

마지막으로 식별자의 첫 자는 숫자가 올 수 없습니다. ( 7abc 는 식별자가 될 수 없음 )

허용가능한 식별자와 불가능한 식별자의 예를 비교해 보겠습니다.

허용 : babo , php4 , linux_apache_php_MySQL

불허 : babo? , 4php , linux-apache-php-MySQL

위의 비교를 유심히 살펴 보시면 어떤 것이 실별자로 사용 가능한지 아실 수 있을 것입니다.

그럼 이 식별자를 이용해 변수를 만들고 이 변수를 출력하는 프로그램을 만들어 보겠습니다.

위 소스의 결과는 다음과 같습니다.

a와 b 그리고 sum 이라는 이름의 변수들을 만들어 이렇게 덧셈 계산을 해보았습니다.

쉽죠?

이제 변수가 어떤 것인지 조금 아시겠어요?

참고로 위에서 말씀드린 이미 지정된 변수와 똑같은 이름의 변수를 만들어 쓰지 않도록 유의하시기 바랍니다.

Prev
PHP 기초 문법 - 변수 (2)
다운군
Next
PHP 기초 문법 - Type (배열과 객체)


PHP 기초 문법 - 변수 (2)

Name
Subject
PHP 기초 문법 - 변수 (2)

PHP 기초 문법 - 변수 (2)

변수의 사용 범위

변수에는 지역변수라느니 전역변수라느니 하는 것들이 있습니다.

말 그대로 지역변수는 어떠한 일부분 영역에서만 적용되는 변수이고,

전역변수는 프로그램의 시작부터 프로그램의 종료까지 유효한 변수입니다.

위 소스와 결과를 비교하면서 보도록 합시다.

우리는 아직 함수라는 것을 배우지 않았기 때문에 소스가 다소 생소할 수 있을 것입니다.

함수를 간단히 살펴보면

function 함수이름( 파라미터 ) {

}

와 같은 형식으로 함수를 정의하며 정의된 함수는 ' 함수이름(파라미터); ' 식으로 실행합니다.

위의 소스는 Hello1,2,3 이 세 함수를 정의하고 Hello3,Hello1,Hello2,Hello3을 차례대로 실행시킨 것입니다.

그런데 결과를 보면 Hello2 함수만 결과가 없는 것을 볼 수 있습니다.

이는 15번째 줄에 정의된 변수 $hello 가 Hello2 함수까지 영향을 미치지 못하기 때문입니다.

즉, 변수의 범위가 한정되어 함수까지 적용이 안되었다는 말입니다.

함수 Hello1 과 비교해 보시면 함수 Hello1 은 함수 내부에 변수 $hello를 정의하였기 때문에

' 안녕하세요 ' 라는 글자가 출력되었습니다.

그렇다면 15번째 줄에 정의된 변수 $hello를 함수 속에서 쓰고 싶을 때는 어떻게 해야 할까요.

바로 함수 Hello3 과 같이 변수 $hello를 전역변수로 지정해주면 됩니다.

전역 변수 지정은 변수 앞에 global을 추가해 주면 됩니다.

( 전역변수를 이용하지 않고 함수에 파라미터로 $hello를 넘겨주는 방법도 있습니다. )

15번째 줄에 정의된 변수가 함수 내부에서 쓰일 수 없듯이..

함수 내부에서 정의된 변수도 함수 외부에서 쓰일 수 없습니다.

함수의 시작과 함께 생성되었다가 함수가 끝나면서 소멸되기 때문이지요.

그런데 가끔 함수 안의 변수를 다시 써야 할 때가 있습니다.

이런 경우 static 변수 (정적변수)를 사용하면 됩니다.

만약 $test를 정적변수로 지정을 하지 않았다면 모두 1인 값이 출력됩니다.

왜냐하면 test 함수가 실행되면 $test 변수가 새로 생성되니 그 값은 NULL( 0이라고 생각하세요..^^) 이 됩니다.

따라서 항상 $test값은 1이 아니므로 매번 $test에는 1이 저장되게 되지요.

상수

상수는 아주 간단합니다. 말 그대로 항상 똑같은 값을 가지는 수이지요.

그래서 딱 한번만 설정하면 전역변수처럼 사용할 수 있습니다.

상수는 대문자로 표기하는게 일반적입니다. 또한 변수처럼 $ 표시는 하지 않습니다.

define 으로 상수를 설정할 수 있습니다.

define("상수명","상수에 저장될 값");

이런 식으로 사용되는데..

위의 예제에서 보듯이 define 이후의 HELLO는 "안녕하세요"를 나타냅니다.

그렇다고 echo "HELLO" 까지 "안녕하세요"라고 출력되는 것은 아닙니다.^^

PHP에서는 미리 일정의 상수를 정의해 두었습니다.

예를 들면 PHP_VERSION (현재 PHP 버전), PHP_OS (현 시스템의 운영체제), M_PI (원주율)등이 있습니다.

Prev
PHP 기초 문법 - 연산자
다운군
Next
PHP 기초 문법 - 변수 (1)


PHP 기초 문법 - 연산자

Name
Subject
PHP 기초 문법 - 연산자

PHP 기초 문법 - 연산자

산술 연산자

산술 연산은 흔히 우리가 접하는 더하기 빼기 곱하기 나누기를 말합니다.

어려운 말로 가감승제( 加減乘除 ) - 모처럼 오바했음 ... ^_^ (씨익) .... 퍼버벅.. @.# 지송..ㅜㅜ

    + | 더하기
- | 빼기
* | 곱하기
/ | 나누기
% | 나머지

더 이상 설명이 필요없죠? 모르시는 분은 초등학교 다니는 동생한테 물어 보세요. : Ð

대입 연산자

대학가는 연산자가 아닙니다. ㅡㅡ;; ( 오늘따라 무지 오바하는 군요.. 지송함돠.. 주의 할게요 .. )

기본 대입 연산자는 = 입니다.

일반적으로 = 기호는 같다라고 생각합니다.

그러나 a = b 는 a 와 b 는 같다가 아니라.. (PHP에서 실제 같다는 ==입니다.)

b 의 값을 a 에다가 대입한다 라는 뜻입니다.

그래서 대입 연산자이지요.. ^^

결과적으로는 a 와 b 가 같지만.. 의미상 아주 다릅니다. 특히 프로그램에서는 치명적이죠..

예) $a = ($b = 4) + 5; // $a는 9, $b는 4의 값을 가진다.

괄호 안이 가장 우선으로 처리됩니다. 따라서 $b 는 4 가 되고 4 가 된 $b에 5를 더한 그 값이

$a 에 입력됩니다. 결과는 $a 는 9 , $b 는 4입니다.

비교 연산자

비교 연산은 말 그대로 두 개의 값을 비교하는 것입니다

    < | 작다
> | 크다
<= | 작거나 같다
>= | 크거나 같다
== | 같다
!= | 같지 않다

증감 연산자

    ++ $a | $a를 1 증가후 $a를 반환
$a ++ | $a를 반환후 $a 에 1 증가
- - $a | $a를 1감소후 $a를 반환
$a - - | $a를 반환후 $a 에 1 감소

예제를 보면 이해가 갈겁니다.

문자열 연산자

문자열을 더할 때는 . (쩜) 연산자를 씁니다.

$a = " 안녕 ";

$b = " 하세요";

일 때 두 문자열을 더하고 싶으면 $c = $a . $b; 하시면 됩니다.

$c 에 한마디를 더 추가하고 싶을 때는..

$c .= " 반가워요~"; 하시면 됩니다.

결과적으로 $c = " 안녕 하세요 반가워요~"; 와 같습니다.

Prev
PHP 기초 문법 - 제어구조 (1)
다운군
Next
PHP 기초 문법 - 변수 (2)


PHP 기초 문법 - 제어구조 (1)

Name
Subject
PHP 기초 문법 - 제어구조 (1)

PHP 기초 문법 - 제어 구조

if

if 문은 제어 구조의 가장 기초가 되는 부분입니다.

말그대로 만약 ~~ 이면 다음 내용을 실행하라는 것입니다.

소스에서 보듯이..

if 구문은

if ( .... ) { .... } 와 같은 형식으로 사용합니다..

괄호안이 참인 경우 중괄호 안을 실행하게 되는 것이지요..

참고. 위 소스처럼 중괄호 안이 한 줄인 경우 중괄호의 생략이 가능합니다.

else

else 구문은 if 문에서 괄호안의 결과가 FALSE 인 경우 즉, 거짓인 경우 실행합니다.

특별히 설명은 필요 없겠죠? ^^

elseif

elseif 구문은 else와 if를 합쳐놓은 것과 같습니다.

elseif 는 반드시 위의 if 구문이 거짓이고 elseif 구문이 참일 때 중괄호가 실행됩니다.

if-elseif-else 구문은 위의 소스를 잘 보시면 충분히 이해 하시리라 생각됩니다.

while

while은 루프라고 하며.. 조건절이 참일 경우 무한 반복하게 됩니다.

위의 소스에서 보시다시피 변수 $i는 실행시마다 1씩 증가하며..

구문은 변수 $i의 값을 매번 체크하여 참일 경우 다시 실행 시키게 됩니다.

따라서 while 구문은 10번 실행후 자동 종료됩니다. ^^

뭔소린지 아시겠죠? ^^;; 하핫..

do .. while

do .. while 구문은 while 문과 유사하며..

조건절이 뒤에 있기 때문에 반드시 한번은 실행을 한다는 차이가 있습니다.

무조건 한번 실행하고 조건절을 판단하므로 위와 같은 결과를 내게 됩니다.

만약 while 문을 썼다면 아무 결과도 안나왔겠죠.. 그냥 공허한 흰색 배경만이...... ^^

Prev
PHP 기초 문법 - 제어구조 (2)
다운군
Next
PHP 기초 문법 - 연산자


PHP 기초 문법 - 제어구조 (2)

Name
Subject
PHP 기초 문법 - 제어구조 (2)

PHP 기초 문법 - 제어 구조 ( 2 )

for

for 문은 while과 같은 루프입니다.

for (expr1; expr2; expr3) statement

와 같은 형식을 가지며.. expr1 이 무조건 한번 실행된 후에..

expr2 조건을 검사합니다.

expr2가 참이면 statement를 실행하고 statement가 모두 실행되면 expr3를 실행합니다.

( 뭔말인지 모르시겠죠? ^^;;;; )

소스를 보시면 쉽게 이해하실 수 있을 것입니다.

나머지 세 방법은 이렇게도 할 수 있구나 하는 것 정도만 이해하시면 됩니다.

break

break 문은 위에서 배운 for와 앞서 배운 while 같은 루프를 빠져나오는 명령입니다.

위의 소스에서 보듯이 (14번째줄) 변수 $i가 10보다 커지면.. break에 의해 for 문을 빠져나오게 됩니다.

( switch 문을 벗어날 때도 break를 씁니다.아래에서 배움)

continue

continue는 break와 달리 루프의 처음으로 돌려 보내는 명령입니다.

위 소스에서 보듯이 (9째줄) continue 다음에 숫자 옵션을 추가하여..

루프를 몇 단계 벗어날지도 설정할 수 있습니다.

세단계 루프를 벗어나니까.. 11번째줄과 13번째줄은 절대 프린트가 안되겠죠? ^^

switch

다음은 switch 문을 if 문으로 표현한 것입니다. 소스를 보시면 쉽게 이해되실거예요^^

위 소스에서 보듯이 switch 문은 if 문을 여러 개 정렬해놓은 것과 같습니다.

예를 들면 90점은 A 80점은 B 70은 C 같이 등급을 매길 때 유용하게 쓸 수 있습니다.

근데.. 50점 이하는 모두 F를 주고 싶은데.. 귀찮게 50 40 30 .. 모두 case를 만들기가 그렇죠?

이럴 때 default를 쓰면 됩니다. case로 지정안된 모든 값은 default 값으로 정해지는 거죠

case 처럼 default : 이렇게 쓰면 되구요.. break는 쓸 필요가 없습니다.

if 구문과 비교하면서 잘 생각해 보세요..^^

Prev
PHP 기초 문법 - 제어구조 (3)
다운군
Next
PHP 기초 문법 - 제어구조 (1)


PHP 기초 문법 - 제어구조 (3)

Name
Subject
PHP 기초 문법 - 제어구조 (3)

PHP 기초 문법 - 제어 구조 ( 3 )

require()와 include()

이 두 구문은 외부 파일을 대체하는 기능을 합니다.

require('somefile.html'); include('somefile.html');

과 같은 형식으로 사용하는데.. 아래의 예를 보시면 쉽게 이해하실 수 있을것입니다.

head.html

main.php

결과 : main.php

include() 문 자리에 head.html의 소스가 고스란히 들어간 결과와 같게 됩니다.

그럼 이번엔 PHP 파일을 인클루드 해보겠습니다.

main.php

inc.php

결과 : main.php

여기서 주의해야 할 점이 있습니다.

include()문이 파일로 대체된다고 해서 inc.php 파일에 를 빼버린다면..

위의 결과처럼 PHP 소스가 아니라 그저 HTML인것으로 이해하게 됩니다.

이러한 결과를 내는 이유는 include()와 require()가 실행될때 자동으로 PHP 모드를 빠져나오고

구문이 끝남과 동시에 다시 PHP 모드로 돌아오기 때문입니다.

마지막으로 야후 메인페이지를 인클루드 해보겠습니다.

include('http://www.yahoo.co.kr');

위처럼하면 URL을 인클루드하게 됩니다.

인클루드 위아래에 약간의 장난을 하면 재미있는 결과가 나오겠죠? ^^

위의 예제들은 모두 require() 문으로 대체해도 똑같은 결과를 얻을 수 있습니다.

"그럼 왜 불필요하게 같은 기능을 하는게 두개가 있을까?" 하는 의문을 가지실 겁니다.

답부터 말씀드리면 둘은 똑같지는 않기때문입니다.

기능이 비슷하긴 하지만 엄연히 다른부분이 있습니다.

require()와 include()의 차이점

require()는 항상 실행됩니다.

만약 조건문에 싸여 있다 하더라도 실행되고 그 조건문이 절대로 실행되지 않는 구문이라도 실행됩니다.

반면 include()는 조건문에 싸여 있을 경우 조건에 맞을때만 실행됩니다.

따라서 조건문에 맞춰 특정 파일을 소스내에 포함시키고 싶다면 반드시 include()문을 사용해야 합니다.

Prev
리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (1)
다운군
Next
PHP 기초 문법 - 제어구조 (2)


리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (1)

Name
Subject
리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (1)

리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (1)

카운터

카운터는 홈페이지에 접속하는 사람들의 수를 나타내는 프로그램입니다.(다들 아시져?)

대부분의 경우 오늘의 접속자 수와 지금까지의 총 접속자 수를 표시하지요.

일반적으로 3가지 종류의 카운터가 있습니다.

1. 일반 카운터 : 카운터가 있는 페이지를 다시 읽을때마다 카운터가 올라감

2. 쿠키 카운터 : 쿠키라는 것을 이용해서 브라우저를 닫기전까지 단 1회만 올라감.

3. 세션 카운터 : 세션이라는 것을 이용해서 세션이 살아 있을때까지 단 1회만 올라감.

쿠키

쿠키란 무엇이냐? 과자라구요?

하하..무릎꿇고 두손 드십셔.. -_-;;

우리는 다음이나 다른 사이트에 들어갈때..

<오늘은 내가 주인공>

아이디와 패스워드를 넣고 들어가는 경우가 많습니다.

이는 회원만 사이트를 이용할 수 있게 함이죠..

다른 일반인들이 아무나 들어오지 못하게 로그인 과정을 거치게 하는 겁니다.

근데 한번 로그인을 하고 나면 브라우저를 없애거나 로그아웃을 하기 전까지는

어느 페이지에 가더라도 다시 로그인 하라는 창은 뜨지 않습니다.(특별한 경우 제외)

그 이유는 로그인 후에 접속자에게 쿠키라는것을 만들어 주었기 때문입니다.(사용자컴에)

쉽게 생각해서 우리가 들어갈려고 하는 사이트를 놀이동산이라고 하면.

쿠키는 자유이용권입니다.

처음에 놀이동산에 들어갈때 자유이용권을 사면..(쿠키는 무료지만..^^;;)

어느 놀이기구를 타더라도 그것만 보여주면 다 탈 수 있지요. ^^

대충 이해가 되시나요?

참고. 쿠키는 브라우저를 닫거나 로그아웃하면 삭제됩니다.

세션

세션은 쿠키의 한단계 발전된 개념입니다.

쿠키는 사용자가 들어오는건 알 수 있어도 말없이 나가 버리면

나간것에 대해 알지 못합니다.

<조연 - 세션맨들>

세션이 한 수 위라고 했죠? ^^

세션은 사용자가 나가버리면 조금 있다가 "어 이녀석 나가버렸군."하고 세션을 삭제합니다.

그리고 세션은 특이한 기능이 하나 더 있습니다.

놀이 동산에서 놀이기구를 안타고 그냥 멀뚱거리기만하면 ..

"넌 20분동안 놀이기구를 안타고 있으니 세션이 필요없나보구나." 하면서

세션을 삭제해 버립니다. (호홋.. 좀 잔인하져? ^^)

하지만 세션도 단점은 있습니다.

세션이 사용자의 접속상태를 확인하는 등 별도의 작업을 하기때문에 서버를 힘들게 하거든요.

PHP에서도 PHP4가 되면서 세션을 지원하기 시작했습니다.

그래서 아직은 많이 쓰진 않습니다.

우리의 선택.

그럼 우리는 일반 카운터를 선택할것이냐 쿠키 카운터를 쓸것이냐 그것도 아니면

세션 카운터를 쓸 것이냐에 대한 고민에 빠질것입니다.

(제목에도 있듯이 쿠키카운터 쓸겁니다. 고민하지 마십시오.)

일반 카운터는 페이지를 볼때마다 무조건 올라가기 때문에 좀 부정확하져.

세션 카운터를 쓰자니 서버가 부담스럽고.

그래서 젤루 무난한 쿠키를 선택했습니다.

대부분의 카운터가 바로 이 쿠키를 써서 만들어진 것입니다.

쿠키를 가지고 있나 없나 여부를 확인해서 프로그램을 짜면

브라우저를 닫거나 쿠키를 삭제하기 전까진 카운터가 1밖에 안올라가게 되죠.

쿠키를 이용한 카운터 만들기 1부 끝...

Prev
리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (2)
다운군
Next
PHP 기초 문법 - 제어구조 (3)


리바이벌 강좌 - 쿠키를 이용하여 카운터 만들기 (2)

Name
Subject
리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (2)

리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (2)

만인의 선택 "쿠키"

우리가 앞선 강좌에서 선택한 것은(사실은 제가 선택했지요..^^) 쿠키였습니다.

자 그러면 이제 쿠키로 카운터를 만들어야 할터인데..

카운터에 왜 쿠키가 필요한지는 알아야겠죠?

쿠키는 카운터에서 무슨일을 하나?

카운터는 홈페이지를 방문한 사용자의 수가 정확히 얼마나 되는가를 알고 싶은게 목적입니다.

대개 카운터는 메인페이지에 넣기 마련인데..

(물론 프레임등을 이용하여 항상 보이는 곳에 두기도 합니다.)

만약 메인페이지를 브라우저에서 불러 들일때마다 카운터가 하나씩 증가한다면

엽기적인 방문자(메인페이지에서 F5를 마구 눌러대는 사람)나 수시로 메인페이지로

가는 Home 버튼을 누르는 사람들에게 걸리면 실질적인 방문자가 10명임에도

하루방문자가 100에서 심하게는 1000까지 이르는걸로 나오게 됩니다.

이래서는 안되겠지요?

물론 홈지기를 다소 흥분시키기에는 충분하지만요..

이를 방지하기 위해서 방문자가 홈페이지에 접속해서 구석 구석을 구경하는 동안은

카운터가 안올라가게 해야한다는 생각을 누군가가 가지게 되었습니다.

그 사람은 고민을 했겠죠..

어느 순간 그 사람의 머리에 "쿠키"란 단어가 떠올랐을 겁니다.

쿠키는 브라우저를 닫거나 일부러 삭제하지 않으면 절대로 안없어지니까요.

방문자가 홈페이지에 접속하면 쿠키를 손에다 쥐어주고 카운터를 하나 올립니다.

방문자가 다시 Home 버튼을 누르거나 F5(새로고침) 버튼을 눌르면 쿠키를 가지고 있는지

확인을 해서 쿠키를 가지고 있으면 카운터를 무시하고 쿠키가 없으면 새로 접속한

사람으로 인식하고 새로 카운터를 올립니다.

이게 바로 쿠키를 이용한 카운터의 원리입니다.

그럼 쿠키가 어떻게 생겼는지 한번 볼까요?

쿠키의 생김새

SetCookie ("쿠키이름", "쿠키값");

쿠키의 모양은 대충 이렇습니다. (실은 가장 간단한 쿠키의 모양입니다.)

그럼 실제로 우리가 카운터에서 쓰게될 진짜 모습을 구경해 봅시다.

SetCookie("ip",$REMOTE_ADDR);

크헉..

<쿠키의 실제 모양(?)>

처음부터 모르는게 나와서 당황스러우시죠?

자 그럼 하나씩 알아봅시다.

위에서 보듯이 ..

쿠키이름 = ip -> 변수

쿠키값 = $REMOTE_ADDR -> 변수값

입니다.

변수의 모양은 많이 보셨죠?

다들 아시다시피 변수는 $로 시작합니다.

따라서 $ip에는 $REMOTE_ADDR 이라는 값이 들어가게 됩니다.

그럼 도대체 $REMOTE_ADDR은 뭔가하는 궁금증이 자연스레 생기게 됩니다.

$REMOTE_ADDR은 방문자의 IP Address를 알려주는 환경변수같은 겁니다.

제 IP가 211.45.255.123 이라면..

echo $ip 의 결과는 211.45.255.123 이 나오게 됩니다.

쿠키에 꼭 IP 주소값을 가지고 있어야 하나?

결론적으로 아닙니다.

어떠한 값을 가지고 있어도 됩니다.

제가 여기서 IP 주소를 굳이 선택한 이유는 접속자에 대한 로그파일을 만들어 놓기 때문입니다.

Prev
리바이벌 강좌 - 쿠키를 이용하여 카운터 만들기 (End)
다운군
Next
리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (1)


리바이벌 강좌 - 쿠키를 이용하여 카운터 만들기 (End)

Name
Subject
리바이벌 강좌 - 쿠키를 이용하여 카운터 만들기 (End)

예제 보기

소스 파일 보기

이 카운터의 전체적인 흐름은 다음과 같습니다.

[카운터를 달기위한 선행작업]
1. 카운터가 들어갈 페이지와 동일한 디렉토리에 count.txt 라는 파일을 만듭니다.
2. 퍼미션(파일의 권한설정)을 777로 맞춥니다.
텔넷 : chmod 777 count.txt
FTP : 파일을 클릭하고 오른쪽 버튼을 누르면 chmod 설정메뉴가 있습니다.

WS_FTP 의 예)

위 그림과 같이 체크 박스를 모두 클릭하시거나 numeric을 777로 수정하면 됩니다.

[카운터의 흐름도]
1. 현재까지의 방문자수를 알기 위해 count.txt 파일을 열어 적혀있는 값을 가져옵니다.

2. 파일에서 가져온 값에 쓰레기값(빈공간)을 없앱니다.
그럼 현재까지의 방문자 수를 구한 샘이군요. $count 에 저장되어 있습니다.

3. 첫번째 접속인지 아니면 이미 접속되어있는 상태인지 확인합니다.
매번 페이지를 볼때마다 카운터가 올라가는 것을 방지하기 위함입니다.
이미 접속되어 있다면 쿠키값을 가지고 있겠죠?
쿠키가 저장된 변수는 $ip 입니다. $ip의 값을 확인하면 되겠네요.
if (!$ip) -> $ip 값이 비어 있을때.. 즉 처음 접속했을때 입니다.

4. 만약 쿠키값이 있다면 다시 카운터를 올릴 필요가 없으니 현재 방문자수를 보여주면 될테고..
쿠키값이 없으면 처음 접속하는 것이니 카운터를 올려주도록 합시다.
위에서 카운터는 $count 변수에 저장되어 있다고 했습니다.
그럼 $count ++; 로 $count 값에 1을 더합니다.

5. 자 그럼 카운터값을 저장해야겠지요?
다시 count.txt 파일을 엽니다. 이번엔 fopen 이란 함수가 쓰였네요.
fopen(파일 이름,파일모드) 형식으로 쓰는 겁니다.
파일모드는 w,r,w+,r+ 등등이 있는데.. write(쓰기)할거냐 read(읽기)할거냐를
지정해 주는 것입니다. 우리는 파일을 쓸거니깐 w를 쓰면 되겠죠?

6. 파일을 열었으니 값을 저장해 봅시다.
fwrite 눈치채셨겟지만.. file을 write 하겠다는 함수입니다.
fwrite(열려진 파일의 핸들,저장하고자 하는 값) 이러한 형식입니다.
핸들이 뭔지 궁금하실텐데.. 아래에 보충설명이 있습니다.

7. 자 파일을 열어 저장했으니 열었던 파일을 닫습니다.
fclose 파일을 닫겠다는 거겠죠?
fclose(열려진 파일의 핸들) 형식입니다.

8. 카운터도 저장하고 했으니 접속했다는 의미로 쿠키를 하나 줍시다.
홈피를 방문해 줬는데 얼마나 이뻐요..^^;;
쿠키하나 아니 열개라도 주고 싶은데.. ^^;;;
SetCookie(쿠키를 저장할 변수,저장될 값) 의 형식으로 쓰여집니다.
물론 SetCookie 함수는 이외에 더 많은 설정을 할 수 있습니다.
가장 간단한 모양이라고 저번에 말씀드렸죠?
$REMOTE_ADDR 은 환경변수의 일종으로 브라우저가 제공해주는 값입니다.
접속자의 접속 IP를 알려주는 거지요. ^^

9. 자 그럼 쿠키도 하나 줬으니 이제 카운터를 보여주면 되겠네요.
카운터를 출력할 부분에다가 $count 값을 뿌려주면 끝!!!

* 파일 핸들에 대한 추가 설명은 다음글에 있습니다.
다음글 읽기

Prev
파일 열고 닫고?? 왜 그렇게 귀찮게하지? 핸들은 또 모야?
다운군
Next
리바이벌 강좌 - 쿠키를 이용한 카운터 만들기 (2)


파일 열고 닫고?? 왜 그렇게 귀찮게하지? 핸들은 또 모야?

Name
Subject
파일 열고 닫고?? 왜 그렇게 귀찮게하지? 핸들은 또 모야?

강좌 최초 작성일 : 2001/09/01
강좌 최종 수정일 : 2001/09/01

[파일 열고 닫고?? 왜 그렇게 귀찮게하지? 핸들은 또 모야?]

그냥 fwrite(파일이름,저장값) 과 같은 형식으로 만들었으면 간단할거라 생각되는데
왜 무슨 핸들이 어쩌구 파일을 열고 닫고 이 난리법썩을 피워야 하는지 궁금하실 겁니다.

자 그럼 상상을 나래를 펴볼까요? -_-;;

앞에 일기장이 하나 있습니다.
일기장에다가 오늘의 일기를(그럼 무얼쓰겠습니까마는..-_-) 쓸겁니다.
"오늘 순이를 만났다." 식으로 말이죠.-_-;; (제가 좀 단순합니다.)
일기쓸때 우선 이 일기장이 나의 일기장인지 남의 일기장인지 확인해야 합니다.
뭐 별도로 이리저리 뒤적거리지 않아도 자기 일기장이라면 바로 알수있겠죠?
위에서 chmod 머라고 한게.. count.txt 라는 일기장을 내것으로 만드는 것입니다.
자 그럼 이게 내 일기장이라는 건 확실하네요.
그럼 일기를 써봅시다.
우리의 소망대로 일기장을 딱 잡고 펜으로 갈깁니다.(fwrite를 위처럼 할경우)
이런-_-;;
일기장 표지에다 일기를 써버렸군요..ㅡ_ㅡ;; (실제로 안된다는 소립니다.)
에고.. 그럼 표지를 넘겨야 겠군요. (fopen을 합니다.)
일기를 쓸것이기 때문에 손에는 펜을 들고 있어야 겠지요? (파일모드는 w)
자 원하는 페이지를 열어 일기를 씁니다.
"오늘 순이를" 까지 썼는데 갑자기 순이 사진이 보고 싶어졌습니다.-_-;
일기쓰던걸 멈추고 서랍에서 옛날 일기장을 꺼냅니다.
옛날 일기장에 순이 사진을 꽂아 두었거든요.. ^^v
일기장을 펴고 순이 사진을 보면서 느끼한 미소를 날립니다.ㅡ_ㅡ
아~ 감정이 북받치는군요. 일기가 왠지 잘 써질것 같습니다.
다시 일기를 씁니다.
어..일기장이 그러고 보니 두개가 있네요. 옛날 일기장과 요즘쓰는 일기장.
우리가 이 일기장을 구분할 수 있는건 각각의 일기장에 대한 기억을 가지고 있기 때문입니다.
그렇다고 일기장의 모든 내용을 기억해서 둘을 구분하는건 아닙니다.
단지 일기장의 모양으로도 일기장 표지의 그림으로도 쉽게 구분 할 수 있는것이지요.
그리고 내가 어디쯤에 일기를 쓰고 있었다 하는 기억도 있겠죠.
이 기억이란게 핸들입니다.
자 각설하고.. 마저 일기를 씁시다.
"만났다."
아.. 일기를 다썼네요..
일기장을 덮습니다.(fclose)
뭐 일기장을 안덮을 수도 있습니다.
나중에 일기를 더 쓰고 싶을 수도 있으니까요..
하지만..
누가 그사이에 와서 내 일기장을 훔쳐 볼수도 있으니..
나중에 또 쓸게 아니라면 왠만하면 닫는게 좋겠죠?

이 개념을 설명하기위해 약간 억지스레 쓴것 같기도 합니다.
이 예가 이해가 잘되는건지도 모르겠네요.^^;;;

Prev
방명록 따라 만들기 1
다운군
Next
리바이벌 강좌 - 쿠키를 이용하여 카운터 만들기 (End)


방명록 따라 만들기 1

Name
Subject
방명록 따라 만들기 1

강좌 최초 작성일 : 2001/09/07
강좌 최종 수정일 : 2001/09/07

방명록 따라 만들기 1부 - 방명록이 별거냐~

[방명록을 파헤쳐보자]

* 방명록이 먼가?

방명록을 만들려는데 방명록이 뭔지 몰라서는 안될테니 방명록이 무엇인지부터 알아보도록 합시다.

방명-록 (芳名錄) [-녹]
행사장·식장·기념관 등에서, 방문하거나 참석한 사람의 이름을 적어 기념이 되도록 하기 위해
마련해 둔 공책.
¶ ∼에 서명하다. (야후에서 발췌..^^;)

그렇습니다.
방명록이란 내 홈페이지에 들어와서 구경잘했으면 소감 한자 적고 나가라는 것입니다.
대개의 홈피 운영자들은 공손하게 "한자 적어주시고 가세여~" 하지만..
가끔 우리는 "안적고 가면 주거~ ㅡ_ㅡ oOoo" 라며 (조금 과격한가?) 협박하는 홈피도
보고는 하지요.

각설하고..(이말은 어떤 소설에서 많이 본것같은..)
방명록이 먼지 알았으니 다음단계로 넘어갑시다.

* 방명록을 만들려면 뭐가 필요한가?

방명록을 만들려면 필요한것이 많습니다.

1. PHP를 지원하는 서버 ( 첫번째 강좌 )
2. MySQL을 지원하는 서버 ( 이것또한 첫번째 강좌 )
3. 메모장 또는 텍스트 에디터 ( 이건 두번쨰 강좐가? )
4. 한글을 이해하고 영어를 읽을 수 있는 머리-_-;;

* 그래도 막막하다 뭘 어디서부터 해야 하나?

"내가 이 방명록 소스하나는 반드시 통달하고 만다!"는 생각을 가지고
그냥 강좌를 따라오면 됩니다.

* 사설이 무지 긴데 본론으로 들어가면 안되냐?

에헴.. 그럼 본론으로 들어가지요 뭐.

[방명록의 구조]

방명록을 만들려면 그 구조를 알아야겠죠?
방명록을 많이들 보아 왔으니 말만으로도 잘 이해 하리라 믿지만..
그래도 강좌에 그림하나 없으면 딱딱할거 같아 그림 한번 넣어봅니다.

- 우선 글 보기 -

- 다음으로 글 올리기 -

이거 외에 글 삭제하기를 추가하면 방명록은 완성!!

간단하게 정리하면 글을 보고 글을 쓰고 글을 지울수 있는 기능만 있으면 된다는 얘기!

딱 세가지 기능밖에 없는데... 벌써 기죽은건 아니겠죠?

자 그럼 다음 글을 보시지요..^^

Prev
방명록 따라 만들기 2
다운군
Next
파일 열고 닫고?? 왜 그렇게 귀찮게하지? 핸들은 또 모야?


방명록 따라 만들기 2

Name
Subject
방명록 따라 만들기 2

강좌 최초 작성일 : 2001/09/07
강좌 최종 수정일 : 2001/09/07

방명록 따라 만들기 2부 - 방명록을 만들기 앞서 해야할 작업

우리는 앞의 강좌에서 PHP와 MySQL을 이용하여 방명록을 만들거라고 했습니다.
MySQL을 이용하기 때문에 MySQL에서 좀 작업해야 할게 있습니다.

* 근데 MySQL은 뭐지?

MySQL을 이용할 거니깐 MySQL에 대해 조금만 알아 보도록 합시다.
(자세히 알려면 이것만으로도 수십 또는 수백개의 강좌가 생길수도 있으니..^^)

예전의 게시판이나 방명록의 (CGI 같은) 데이터는 대개 파일에 저장하고는 했습니다.
예를 들면 누군가 글을 쓰면 sample.txt 라는 파일을 만들고 거기다가 이름 이메일
글의 내용등을 써 넣어서 저장을 한거죠.
그래서 글을 볼때면 이 파일을 읽어 들여서 뿌려주고는 했습니다.

근데..
글의 수와 입력 값등이 많아지자 이 데이터들 중에서 정말 원하는 데이터를 찾기가
어려워졌습니다.
데이터 관리가 어려워진거죠.
그래서 보다 많은 데이터를 보다 효율적으로 관리하고자 해서 데이터베이스라는 것을
만들게 되었습니다.
MySQL도 이런 데이터베이스의 하나입니다.
우리는 방명록의 데이터를 보다 효율적으로 관리하기 위해 MySQL을 쓰기로 한것입니다.

* MySQL을 하나도 모르는데 방명록을 만들수 있을까?

물론 만들 수 있습니다.
단, MySQL과 관련된 부분은 시키는대로 따라해야만 한다는 (많이 어렵진 않지만)
것만 염두해 주시면 됩니다.
MySQL을 자세히 다루지는 않을 겁니다.

자세한 내용은 http://phpschool.com/php_loveme/html/classroom.html

* 위에서 MySQL 작업이 필요하다고 했는데 그건 뭔가요?

MySQL에 데이터를 저장하기 위해서는 우선 가장먼저 디비를 쓸 수 있는 User를 등록하고
그 유저가 사용할 db(데이터 베이스)와 table을 만들어야 합니다.
( db 를 책장이라고 보면 table 은 책장안의 책들입니다. )

다음 그림과 같은 방법으로 유저와 테이블을 만들 수 있습니다.

계정을 받은 서버에서는 User와 DB를 만들 수 없음으로 시스템 관리자에게 문의하시고
중간부분의 mysql -u유저아이디 -p유저패스워드 유저DB 부분 부터 시작하시면 됩니다.

자 그럼 우리가 실제로 만들어야 하는 테이블의 구조를 살펴봅시다.

이 부분은 다음 강좌에 다시 다루기로 하고 우선은 테이블을 만들어 봅시다.

CREATE TABLE guestbook (
id int(11) DEFAULT '0' NOT NULL auto_increment,
name varchar(20),
home varchar(40),
email varchar(35),
comment text,
ip varchar(17),
reg_date datetime,
PRIMARY KEY (id)
);

위의 그림을 참조해 가면서 보시면 이 Create table 은..
mysql -u .. 머 어쩌고 하여 MySQL에 접속된 상태에서 넣는것임을 알 수 있을겁니다.

처음이라 다소 어렵게 느껴 지실지도 모르겠지만..
충분히 따라 오실 수 있으리라 생각됩니다.

위의 이미지를 참조해 가면서 User랑 DB, Table 도 자기에 맞게 만들어 보시기 바랍니다.

Prev
방명록 따라 만들기 3 - 본격적인 소스 분석
다운군
Next
방명록 따라 만들기 1


방명록 따라 만들기 3 - 본격적인 소스 분석

Name
Subject
방명록 따라 만들기 3 - 본격적인 소스 분석

강좌 최초 작성일 : 2002/03/05
강좌 최종 수정일 : 2002/03/05

 아주 오랜만에 강좌를 업데이트 하는군요.

<?php

// ====================================================================================
// DB 접속에 필요한 사항을 설정합니다.
// mysql_connect 함수는 말그대로 MySQL 디비에 접속하는 것입니다.
// 온라인 게임을 하려면 게임서버에 접속해야 하는것과 마찬가지로 디비를 쓰려면
// 우선 접속을 해야겠지요.
//
// Host (서버주소 - localhost를 쓰면 됩니다.)
// User (디비를 쓸 수 있는 권한을 가진 유저 아이디를 씁니다.)
// Passwd (등록된 유저의 비밀번호를 씁니다.)
//
// mysql_select_db 함수는 등록된 유저가 쓸 수 있는 디비를 선택하는 것입니다.
// MySQL에는 여러개의 DB를 만들 수 있거든요.그중 쓰고자 하는 하나를 선택하는 것입니다.
//
// 앞시간에 만든 디비와 비교해보면...
// Host = localhost , User = testuser , Passwd = mypass , DB = testdb 입니다.
// 위처럼 자신의 설정에 맞게 host,user,passwd,user_db 를 바꾸어 줍니다.
// ===================================================================================

$connect = mysql_connect("host","user","passwd") or die("SQL
 server에 연결할 수 없습니다.");
mysql_select_db("user_db",$connect);

// ===================================================================================
// die 는 말그대로 죽었단 뜻이죠. DB 가 죽어버렸는지-_- 응답을 안한다는 소리입니다.
// $connect 변수를 유심히 보세요. mysql_connect 함수의 결과가 $connect 변수에 저장되죠?
// 그런데 다음 mysql_select_db 에서도 $connect 변수가 쓰이고 있습니다.
// 이것은 $connect 변수가 MySQL에 들어가도 좋다는 출입증과 같은 역할이기 때문입니다.
// 그리고 만약 또 다른 MySQL 서버에 접속했다면(혹은 다른 아이디로)
// 이 연결과 위의 연결을 구별하기 위한 구별자역할도 합니다.
// ===================================================================================

// ================
// 게시판 환경설정
// ================

$scale = 5; // 한 페이지당 자료 수
$admin_ip = '127.0.0.1';  // 삭제시 필요한 관리자 IP
$html_allow = 0; // HTML 허용 여부(1 -> yes, 0 -> no)

// 방명록의 테이블 이름은 guestbook 입니다.

// ===================================================================================
// $mode 는 new, up, del 또는 NULL 의 값을 가집니다. ( NULL = 無 )
// $mode 가 new 라는 값을 가지면 새 글을 입력할 때
// $mode 가 up 이라는 값을 가지면 글을 DB에 저장할 때
// $mode 가 del 이라는 값을 가지면 글을 지울때 입니다.
// ===================================================================================

// ==========
// 글 지우기
// ==========

if ($mode == 'del') {

if ($REMOTE_ADDR != $admin_ip) //$REMOTE_ADDR
 은 접속자의 IP정보입니다.
{ // 관리자 IP와 접속자 IP가 다르므로 글 삭제 권한이 없다.
echo("
<script>
window.alert('관리자만
 지울 수 있습니다.')
</script>");
echo("<meta http-equiv='Refresh' content='0; URL=$PHP_SELF'>");
exit;
}
else { //접속자 IP가 관리자 IP와 같으면 글을 지울 수 있는 권리가
 있다.
$que1 = "delete from guestbook where id=$id"; //SQL문을
 만들고
$result = mysql_query($que1,$connect); //SQL문을
 실행한다.
}
}

// =============
// 새 글 올리기
// =============

if ($mode == 'up') {
if (!$name || !$comment) { //이름과
 내용을 적으란 말야!! 적어!!!
echo("
<script>
window.alert('이름과
 남기실 말씀을 적어 주세요');
history.go(-1);
</script>");
exit;
}

if (!$allow_html) { //HTML 입력을 허용하지 않으면
$name = htmlspecialchars($name);              //
 HTML코드를 특수문자로 바꾸어버림
$comment = htmlspecialchars($comment); //
 예) <b> -> &lt;b&gt;
}

// ===================================================================================
// htmlspecialchars 함수를 쓰면 HTML 코드가 적용되지 아니하고 코드를 그대로 출력해준다.
// addslashes 함수는 DB에 데이터를 입력할때 ' (작은따옴표) 같은 값들이 SQL 문에서
// 에러가 나지않고 입력되게 하기위한 배려이다.
// ===================================================================================

$name = addslashes($name);
$home = addslashes($home);
$email = addslashes($email);
$comment = addslashes($comment);

$que1 = "insert into guestbook values
 ";
$que1 .= "('','$name','$home','$email','$comment','$REMOTE_ADDR',now())";
$result = mysql_query($que1,$connect);

if ($result) { // DB에 입력이 잘되었다면..
echo("<META http-equiv='Refresh' content='0; URL=$PHP_SELF'>");
exit;
}
else { // DB에 데이터 입력중 오류가 발생한경우..
echo("
<script>
window.alert('DB 오류가 발생하였습니다.');
history.go(-1);
</script>");
exit;
}
} //up end

// ==============
// 새 글 쓰기 폼
// ==============

if ($mode == 'new') { //새글쓰기 폼을 출력한다.

echo("
<FORM name='form' method='post' action='$PHP_SELF'>
<TABLE border='0' cellspacing='1'>
<TR>
<TD width='109' bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>이름</FONT></TD>
<TD width='541'><P>&nbsp;<INPUT type='text' name='name' SIZE=6 MAXLENGTHTH='20'></TD>
</TR>
<TR>
<TD bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>HOMEPAGE</FONT></TD>
<TD><P>&nbsp;http://<INPUT type='text' name='home' maxlength='40'></TD>
</TR>
<TR>
<TD bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>Email 주소</FONT></TD>
<TD><P>&nbsp;<INPUT type='text' name='email' size=20  maxlength='40'></TD>
</TR>
<TR>
<TD bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>남기실 말씀</FONT></TD>
<TD><P><TEXTAREA name='comment' rows='4' cols='35'></TEXTAREA></TD>
</TR>
<TR>
<TD><P>&nbsp;</TD>
<TD><P>&nbsp;<INPUT type='submit' name='submit' value='글올리기'></TD>
</TR>
</TABLE>
<input type=hidden name=mode value='up'>
</FORM>");
}

// =============
// 내용보여주기
// =============

if (!$mode || $result) { //$mode 변수가 NULL 이면 입력된
 내용을 출력한다.

if (!$start) { $start = 0; }

$que1 = "select
 DATE_FORMAT(reg_date,'Y.m.d'),id,comment,name";
$que1 .= ",home,email,ip
 from guestbook order by id DESC";
$result = mysql_query($que1,$connect);
$total = mysql_affected_rows();

// ================================================================
// $que1  이라는 SQL문을
 작성하고 SQL문을 실행한다.
// $total 에는 검색된 자료의 수가 입력된다.
// ================================================================

for($i=$start ; $i<$start+$scale ; $i++) {  //  start
 에서 scale 까지 만

if ($i < $total) { //
 전체 자료 개수까지만 출력
mysql_data_seek($result,$i); //검색된
 자료중 $i 번째글을 찾고
$row = mysql_fetch_array($result); //$i번째글의
 내용을 $row 변수에 배열로 저장합니다.

$row[comment] = stripslashes($row[comment]) ; //addslashes
 한값을 제거
echo("
<TABLE border='0' cellspacing='1'>
<TR>
<TD width='109' bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'><a href=$PHP_SELF?mode=del&id=$row[id]><IMG src='./img/del.gif' width='22' height='13' border='0' alt='지우기'></a></FONT></TD>
<TD width='541'><P><FONT face='굴림' size='2' color='#FAF1C7'>$row[0] from $row[ip]</FONT></TD>
</TR>
<TR>
<TD width='109' bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>Name</FONT></TD>
<TD width='541'><P><FONT face='굴림' size='2' color='#E7EEF5'>$row[name]</FONT></TD>
</TR>
<TR>
<TD width='109' bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>Home / Email</FONT></TD>
<TD width='541'><P><FONT face='굴림' size='2' color='#E7EEF5'>&nbsp;</FONT>");
if ($row[email]) echo("<A href='mailto:$row[email]'><IMG SRC=./img/mail.gif BORDER=0 ALT='편지쓰기' align=center><FONT face='굴림' size='2' color='#E7EEF5'>$row[email]</FONT></A>
 &nbsp;");
if ($row[home]) echo("<a href=http://$row[home]><IMG SRC=./img/home.gif BORDER=0 ALT='홈페이지' align=center><FONT face='굴림' size='2' color='#E7EEF5'>http://$row[home]</FONT></a>");
echo("
</TD>
</TR>
<TR>
<TD width='109' bgcolor='#5485B6'><P align='center'><FONT face='굴림' size='2' color='#CDDAE4'>Comment&nbsp;</FONT></TD>
<TD width='541'><P><FONT face='굴림' size='2' color='#E7EEF5'>$row[comment]</FONT></TD>
</TR>
<TR>
<TD width='109'><P><HR size='1' noshade></TD>
<TD width='541'><P><HR size='1' noshade></TD>
</TR></TABLE>");
}
}
}

// ===================== 내용 보여주기 끝 ===========

if (!$mode || $result) {  // ====================
 하단 버튼 ==============
echo("
<center>
<a href=$PHP_SELF?mode=new><IMG HEIGHT=30 WIDTH=30 SRC='./img/write.gif' VSPACE=0 HSPACE=0 ALIGN='TOP' BORDER=0 alt='방명록에 글쓰기'></a> ");

$p_p = $start - $scale ; //
 이전 페이지는 시작 글에서 $scale을 뺀값부터
$n_p = $start + $scale ; //
 다음 페이지는 시작 글에서 $scale을 더한값부터

if ($p_p >= 0 && $mode != 'new') {
echo("<a href='$PHP_SELF?start=$p_p'><IMG HEIGHT=30 WIDTH=30 SRC='./img/p-doc.gif' VSPACE=0 HSPACE=0 ALIGN='TOP' BORDER=0 alt='이전 페이지'></a> ");
}

if ($n_p < $total && $mode != 'new') {
echo("<a href='$PHP_SELF?start=$n_p'><IMG HEIGHT=30 WIDTH=30 SRC='./img/n-doc.gif' VSPACE=0 HSPACE=0 ALIGN='TOP' BORDER=0 alt='다음 페이지'></a></center>");
}
}

echo("
<p>
</BODY>
</HTML>");

?>

처음엔 잘 이해가 안가더라도 두세번 훓어보면 충분히 이해하실 수 있을거예요.
제가 SQL 관련된 부분은 설명을 별루 안드렸는데...
SQL의 기본은 추가,검색,수정,삭제 입니다.

* 추가,수정,삭제의 절차
1. SQL문 작성 (Insert into testtable .... , update testtable set ... , delete
 from testtable ... )
2. SQL문의 실행 (mysql_query( SQL문 , 연결정보 ))

* 검색의 절차 (데이터베이스의 핵심)
1. SQL문 작성 (select * from testtable ....)
2. SQL문의 실행 (mysql_query( SQL문 , 연결정보 ))
3. 검색된 값을 출력

소스를 잘 보면 충분히 이해할 수 있습니다.
그럼 멋진 방명록을 기대하겠습니다.

프로그램 보기

Next
방명록 따라 만들기 2