[펌] PHP 쉽게 배우기 > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

[펌] PHP 쉽게 배우기 정보

PHP [펌] PHP 쉽게 배우기

본문

링크에 사이트에 가면 문서파일이 있습니다 그걸 다운받아서 보시면될것 같네요

PHP 쉽게 배우기
1. PHP의 개요 2
2. PHP 사용례1 2
3. PHP 사용례2 2
4. PHP 사용례3 3
5. 본격적인 강의에 앞서... 4
6. 변수와 함수의 정의 4
7. '변수'에 앞서 알아 둬야 할 'IF 구문' 5
8. [변수1]--기초 6
9. [변수2]--사용법 7
10. [변수3]--폼과 변수 8
11. [변수4]--배열변수 10
12. [변수5]--배열변수2 11
13. [변수6]--전역/지역 변수 12
14. [변수7]--재미있는 변수들 13
15. 쿠키 사용법 14
16. 덧셈 뺄셈??? 16
17. 마지막 준비운동 18
18. 잊은 것--참과 거짓 19
19. [조건과 반복1]--WHILE 19
20. [조건과 반복2]--FOR 22
21. [조건과 반복3]--FOREACH 23
22. [조건과 반복4]--기타 24

이 문서는 http://www.phpfree.co.kr/ 에서 발췌한 것이므로 저자의 허락없이 유포 또는 상업적인 목적으로 절대 사용할수 없음을 밝힌다.
 

1. PHP의 개요

PHP(Professinal Hypertext Preprocessor)는 1994년 Rasmus Lerdorf에 의해 개발됐다. 처음에는 비공개판이었으나 1995년 초 공개되면서 Personnal Homepage Tools(PHP)라 불리었다. 사실 이때까지만 해도 PHP는 개인 홈페이지 제작 툴 정도로만 인식됐다. 간단한 유틸리트들로만 구성되어 있었기 때문이다.
PHP가 웹 스크립트 언어로 자리를 잡은 것은 1995년 중반 PHP/FI(Form Interpreter) 버전이 나오고 부터였다.
이후 PHP3이 발표되자 웹 프로그래밍을 주름잡던 PERL을 위협할만한 존재로 성장했고 최근 4.0 버전이 나오자 이제 PERL을 압도했다는 평가까지 받고 있다.
PHP는 최근 Professinal Hypertext Preprocessor로 재해석되고 있다. 그만큼 웹 스크립팅 언어로서 입지를굳힌 것이다.
PHP는 HTML 코드와 함께 프로그램할 수 있는 언어이므로 웹소스 개발에 커다란 장점을 갖고 있다.
이 언어는 특히 사용자가 입력한 내용을 서버로 연결함으로써 PC와 서버가 상호 작용하도록 한다.
그런 의미에서 PHP는 CGI(Common Gateway Interface)의 일종이다.
앞으로 PHP가 얼마나 더 발전하고 또 홈페이지에 사용될지는 아무도 모른다.
다만 현재 상태로도 아주 강력한 웹 프로그래밍 도구라는 것만은 확실하다. 

2. PHP 사용례1

대개 프로그래밍 언어는 무척 어렵다고들 생각한다. 물론 전문 분야로 들어가면 세부적인 지식과 날카로운 판단력 등 많은 사항들이 요구되지만 그저 어렵다는 이유 하나만으로 언어 배우기를 포기할 필요는 없다.
다음에 아주 간단한 사례를 적어 보겠다.

##########################################
<html><head><title>쉽나?</title></head>
<body>
<?php echo "이렇게 하면 어떻게 될까요?"; ?>
</body></html>
############################################
위 코드는 일반 html 문서에 php 코드를 한 줄 삽입한 것이다.
바로 '<?php echo "이렇게 하면 어떻게 될까요?"; ?>'라고 되어 있는 부분이다.
여기서 '<?php'는 PHP를 시작한다는 선언과 같다.
이 부분은 그냥 '<?'라고 적어도 상관없다.
그리고 맨 뒤 '?>'라고 되어 있는 부분은 PHP를 끝낸다는 선언이다.
그 사이에 있는 echo "이렇게 하면 어떻게 될까요?";가 여기서는 브라우저 상에서 출력되는 부분이다.
echo는 글을 쓰라는 명령 정도로 이해하면 될 것이다. 그리고 그 써야 하는 내용은 쌍따옴표(")로 묶어 준다.
맨 뒤 ';' 부호는 echo PHP 구문이 종료됐음을 나타낸다.
위의 간단한 문서를 test.php라고 저장한 후 서버에 올리고 test.php를 브루우저 상에서 호출해 보자.
대부분 '이렇게 하면 어떻게 될까요?'라는 문장이 나타날 것이라 예측했을 것이고 그 예측이 맞았다. 

3. PHP 사용례2

이번에는 좀더 고급스런(?) 예를 만들어 보자.
여기서는 소위 변수라는 것을 하나 사용하게 될 것이다.
변수에 대한 설명은 좀더 후에 배우게 될 것이다.

##################################################
<?
$a = "아주 쉽군";
echo "<html><head><title>사용례2</title></head>
<body>
$a;
</body></html>";
?>
##################################################
'<?'과 '?>'이 의미하는 것은 이미 배웠다.
이제 변수라는 것과 그 변수가 어떻게 쓰이는가를 배울 차례이다.
달러($)표시로 시작하는 '$a'가 변수이고 그 뒤 '=' 다음에 있는 "아주 쉽군"은 $a에 할당된 값이다. 한 마디로 말해서 이제 '$a'는 '아주 쉽군'과 같아졌다.
쌍따옴표 뒤에 있는 ';' 부호는 $a 선언이 끝났음을 의미하는 것이다.
PHP에서 어떤 구문이 끝날 때는 항상 ';' 표시를 써야 한다. 이 걸 사용하지 않으면 에러가 발생한다. 이 부분은 반드시 이해하고 넘어가길 바란다.
변수를 선언한 후에는 echo 명령을 이용해 HTML 문서를 적어 나가고 있다.
여기서는 모든 HTML 문서 내용이 echo 후의 두 쌍따옴표 안에 묶여 있고 역시 이 마지막 쌍따옴표 뒤에는 ';'를 사용함으로써 echo 명령이 끝났음을 알리고 있다.
이 문서를 저장한 후 서버에 올린 후 브라우저로 호출하면 어떻게 될까? 예측한 대로 나온다면 합격이고 아마 대부분 합격 판정을 받을 것이다. 

4. PHP 사용례3
 
이 글이 PHP 사용례의 마지막이 될 것이다.
여기서는 일반 HTML 문서 일부에 PHP 변수를 삽입하는 형태를 배운다.

#################################################
<html><head><title>사용례3</title></head>
<body>
<?
$b = "이렇게 하면 됩니다.";
echo "<b>" . $b . "</b>";
?>
</body></html>
##################################################
약간은 힘들지도 모른다. 그러나 좀더 확실히 보여 주기 위해 위의 예를 들어 봤다.
시작은 사용례1과 같이 HTML 태그로 시작하고 끝 역시 HTML 태그이다.
다른 점은 중간 PHP 구문(<?.....?>)에서 변수가 선언된다는 점이고 그 변수를 echo 함수로 브라우저에 뿌리는 과정에서 두껍게 쓰라는 태그를 사용했다는 점이다.
우선 $b는 "이렇게 하면 됩니다."이다.
그리고 echo 함수를 사용했는데 그 사용한 방법이 'echo "<b>" . $b . "</b>";'로 좀 특이하다.
여기서 우리는 echo 함수를 쓸 때 HTML 태그나 일반 글자 들은 반드시 " "로 묶어 주어야 한다는 사실을 확실히 기억하고 지나가야 한다. "<b>"나 "</b>" 처럼.
대신 변수는 그냥 변수 그대로, 즉 $b로 적어 주면 된다.
그리고 이 3개(<b>, $b, </b>)를 연결할 때 '.'를 사용하고 있음을 볼 수 있다.
마침표만 찍어도 되지만 좀더 보기 편하라고 ' . '과 같이 마침표 앞뒤에 스페이스 키를 집어 넣는 경우도 많다. 나는 스페이스 키를 사용했다.
위의 예에서 echo 함수는 HTML 태그상 '<b>이렇게 하면 됩니다</b>'와 같은 글을 브라우저에 뿌릴 것이다.
이 내용이 '약간 힘들지도 모른다'고 밝힌데 대해 대단히 자존심 상해 하는 이들도 있을 것이다. 그런 분들에게는 정말 죄송하다.
하지만 이 내용이 진짜 힘든 사람은 앞의 글들부터 자세히, 진지하게 읽어 보면서 이해해 보도록 노력해 주기를 바란다. 

5. 본격적인 강의에 앞서...

많은 PHP 관련 서적이 있지만 대부분 비슷비슷한 구성과 내용으로 꾸며져 있는데 대해 실망하지 않을 수 없었다.
대부분 PHP 홈페이지(http://www.php.net)에 가면 볼 수 있는 내용들이었다.
영어가 조금 되시는 분은 PHP 홈페이지를 이용하는 것이 가장 확실하게 PHP를 배우는 방법일 것이다.
그곳에서 각 함수에 대한 여러 사용례들을 보는 것은 프로그래머로서는 정말 행복한 일이다.
이 강좌는 PHP 홈페이지를 직접 활용할 수 없는 초보자들을 겨냥한 것이다.
따라서 아주 쉬운 부분부터, 그리고 꼭 집고 넘어 가야할 부분부터 차근차근 진행해야 할 것이다.
앞으로 우리는 변수가 뭔지, 함수란 도대체 뭐하는 것인지 그런 것들부터 하나씩 배워 나갈 것이다.
이 강좌와 관련해 궁금증이 있는 분은 언제든 '묻고 답하기'의 'PHP' 게시판을 이용해 주시라.
다만 그 글은 이곳 공개강좌에 이미 오른 글에 대한 궁금증이어야 할 것이다. 하나씩 차근차근 배우는 것이 바로 그런 것이 아닐까 생각해 본다. 

6. 변수와 함수의 정의
 
PHP 뿐만 아니라 모든 프로그래밍 언어에서 가장 중요한 개념은 변수와 함수일 것이다.
나는 중고등학교를 다닐 때 수학 성적이 꽤 좋은 편이었는데 그 지긋지긋한 '함수'에 대해서는 그게 뭘 의미하는 것인지도 모른채 학창시절을 마치고 말았다.
이게 우리나라 교육 현실이다.

변수는 Valiable을 번역한 것이고 함수는 function을
번역한 것이다.
말 그대로 변수는 변하는 어떤 것이고 함수는 기능이다.
변수는 프로그래밍을 하면서 마음 대로 바꿀 수 있지만 함수는 이 언어에서 부여한 특정 기능(function)만을 수행한다.

먼저 변수의 예를 들어 보자.
먼저 변수를 선언할 때는 변수 이름 앞에 '$'표시를 해야 한다는 점을 기억하자.

$a="변수";

이렇게 정의하면 변수 a($a)에는 변수라는 값이 부여될 것이다.

한 예를 더 들어 보자

$a = "변수";
$b = "와";
$c = " 함수";
$d = $a . $b . $c;

이렇게 정의하면 $d의 값은 무엇이 될까?
$d에는 "변수와 함수"라는 값이 들어간다.

그런데 변수를 이렇게 사용하면 정말 웃길 것같다.

$a = "10";
$a = "20";

$a에 10의 값을 주고 그 다음 줄에서는 $a에 20의 값을 주고있다.

그럼 $a는 어떤 값을 갖게 될까?
뒤에 선언된 20을 갖게 된다.
따라서 첫번째 줄은 단지 피곤하고 짜증나기로 작정을 하지 않은 인간이라면 도덕적으로나 윤리적으로도 절대 적을 필요가 없다.

이번에는 함수의 예를 들어 보자.
여러분들이 이 강좌를 계속 읽고 있다면 이미 함수는 보았다.
'echo'가 그것이다.
echo는 어떤 문자를 적어 나가는 기능을 포함하고 있는 함수이다. 따라서 echo는 그 기능만 한다.
echo라는 함수를 사용하면서 스피커를 통해 메아리 소리가 울리기를 기대해서는 안된다.
PHP에는 PHP만의 많은 함수들이 있다. 어떤 함수들은 다른 언어와 비슷한 이름에 기능까지 비슷한 것도 많다. 또 전혀 다른 함수들도 많다.

이렇게 무지무지 많은 함수들에 대해 이 강좌가 일일이 설명해 나가야 할지에 대해서는 아직 결정을 못했다.
이 부분은 전적으로 이 강좌를 계속읽어 가는 분들의 의견에 따르기로 하겠다.

이번 강좌로 변수와 함수에 대한 설명이 모두 끝난 것은 아니다.
여러 차례에 걸쳐 변수와 함수에 대한 강좌가 계속 돼야 할 것이다.

7. '변수'에 앞서 알아 둬야 할 'if 구문'

우리는 곧 '변수' 강좌를 시작해야 한다. 변수는 무궁무진하게 변하는 마법사와 같다. 이 변수를 제대로 알아보기 위해 우선 if 구문에 대해 먼저 배워야 겠다.
if 구문은 while, for 등의 구문과 같이 대부분의 언어를 통해 유쾌하고 발랄한 프로그램을 제작할 수 있는 중요한 도구이다.
여기서는 단지 if 구문의 기본만을 배울 것이다. if와 while, for 등에 대해서는 변수에 관한 강좌가 모두 끝난 후 다시 한번 배우게 될 것이다.

예를 들어 보자.
----------------------------------------
1)사람이면 밥을 먹어라.
2)아니면 굶어라.

사람일 경우 1)을 출력하고 사람이 아닐 경우(개든 소든 또는 나무든 공기든 아무 것도 아닌 무엇이든 어쨌든 사람이 아니면) 2를 출력하라는 뜻이다.
----------------------------------------
이걸 if 구문으로 바꾸면 다음과 같다.

$a = "사람";
if ($a == "사람") {
echo "사람이면 밥을 먹어라.";
}
else {
echo "아니면 굶어라.";
}
이 경우 $a에 사람이라는 값을 할당했으므로 1)의 문장을 출력할 것이다.
만약 $a에 개나 돼지를 할당하거나 아무 것도 할당하지 않았을 경우($a = "";) 2)의 문장이 출력된다.
여기서 else는 if가 규정하지 않은 모든 경우에 해당한다. 이전에 '개든 소든 또는 나무든 공기든 아무 것도 아닌 무엇이든 어쨌든 사람이 아니면'이라고 한 부분이 이를 설명하려 한 것이다.

한 예를 더 들어야 겠다.
----------------------------------------
1)사람이면 밥을 먹어라.
2)개일 경우에는 개밥을 먹어라.
3)아니면 굶어라.

사람일 경우 1)을 출력하고 사람이 아니면서 개일 경우에는 2)를 출력하고 이도저도 아닐 때(소든 나무든 공기든 아무 것도 아닌 무엇이든 어쨌든 사람이나 개에 해당하지 아니면) 3를 출력하라는 뜻이다.
----------------------------------------

$a = "개";
if ($a == "사람") {
echo "사람이면 밥을 먹어라.";
}
elseif ($a == "개") {
echo "개일 경우에는 개밥을 먹어라.";
}

else {
echo "아니면 굶어라.";
}

이 경우 $a에는 개라는 값이 할당됐으므로 '개일 경우에는 개밥을 먹어라.'라는 문장을 출력한다.
if 구문에서 if와 else는 딱 한번씩밖에 사용할 수 없다.
하지만 if와 else 사이에 있는 elseif는 원한다면 천개든 만개든 추가할 수 있다.

'만약에 $a가 사람이면 $b를 하고 $a가 개이면 $c를 하고 $a가 돼지이면 $d를 하고.....$a가 나무이면 $y를 하고 그도 저도 아니면 $z를 하라.

이런 표현을 하려할 때 '$a개 개이면 $c를 하고 $a가 돼지이면 $d를 하고.....$a가 나무이면 $y를 하고'까지의 모든 구절은 elseif를 써야 한다.
대신 맨 처음 '$a가 사람이면 $b를 하고'는 if 구절로 맨 끝 '그도 저도 아니면 $z를 하라'는 그야 말로 그도 저도 아닌 마지막 경우이므로 else 구절로 감싸 주어야 한다. 마치 애정 표현이라도 하듯이... 

8. [변수1]--기초

PHP에서 변수를 만들 때는 앞에 '$' 표시를 해야 한다고 이미 지적한 바 있다.
변수 이름은 그 $표시 뒤에 영어 또는 숫자를 이용해서 만든다.
예)$aaaa_1111111_zzzzzzzzzzzzzzzzzzz
위의 예도 변수 이름으로 사용될 수 있다.
그러나 이렇게 천문학적이고 점술적인 변수 명을 사용하는 경우는 드물 듯하다.
예를 들어 어떤 숫자에 대한 변수를 만든다면 '$number1'과 같이 프로그래밍하는 사람이 이해하기 쉬운 이름을 택하기 마련이다.
그러나 한가지. $표시 되에는 반드시 영어가 먼저와야 한다는 점은 잊지 말자.
예)$1111111_aaaa_zzzzzzzzzzzzzzzzzzz
이 변수명은 위의 예와 마찬가지로 여전히 천문학적이고 또 점술적이기는 하지만 변수이름으로는 사용될 수 없다.
$뒤에 바로 숫자가 왔기 때문이다.
변수에는 정수과 실수, 문자열, 배열, 객체 형태가 있다고 한다.
하지만 여기에 대해서는 별로 신경 쓸 필요가 없다. PHP는 변수의 생김새를 보고 그 형태를 미리 알아 주기 때문이다.
그래도 정수형이니 실수형이니 하는 것들이 뭘 의미하는지는 한번 보아둘 필요가 있겠다.
####################################
1)정수형: $a = "1111111";
2)실수형: $a = "111.11111";
3)문자열형: $a = "PHPFree 사랑";
####################################
이런 정도이다. 만약 정수와 실수가 무엇인지를 모르고 있다면 아마 내가 프로그램을 처음 배울 때와 거의 비슷한 수준 쯤 되나 보다. 그까짓거 몰라도 프로그램은 배울 수 있다.

여기서는 문자열 형태의 변수를 정의하는 방법에 대해 약간 지적하고 넘어가야 겠다.
만약 $a라는 값에 "이 책은 $10 달러입니다"라는 값을 대입하고 싶다고 치자. 우리는 여기서 약간의 어려움을 겪게 된다. 변수가 '$' 표시로 시작하는데 변수의 값에 $ 표시를 사용해도 되겠는가 말이다.
정답은 '사용할 수 있으나 조금 특이하게 사용해야 한다는 것'이다.
위의 경우는 아래와 같이 정의해야 한다.
$a = "이 책은 \$10달러입니다";
$ 표시 앞에 '\' 표시가 붙은 것에 유의하자.
우리는 '$' 표시와 같은 몇몇 문자들을 특수 문자라고 정의하고 그 문자들을 이용해서 변수를 정의하려 할 때 그 특수문자 앞에 '\'를 표시함으로써 변수가 정상적으로 선언되도록 유지한다.
그런 특수문자의 예를 몇 들자면 n(새로운 줄), r(엔터키를 침), t(탭키), \(백슬래쉬), "(쌍따옴표) 등이다.
이런 부호를 변수로 선언할 때, 즉 변수의 실질적인 내용인 알맹이로 사용하려면 다음과 같이 입력해야 한다.
\n, \r, \t, \\,\".
아마도 이해가 가리라고 본다.
위에서 열거한 규칙들을 기준으로 변수를 만들어 나가면 프로그램은 한결 편해진다.
예를 들어 보자
###################################
$a = "10";
$b = $a + $a;
$c = $b + $a;
$d = $a + $b + $c;
###################################
우리는 여기서 숫자라고는 딱 한번 $a에 10을 할당한 것 뿐이다. 그러나 이 한번의 선언으로 여러 값을 얻어내고 있다.
$b는 20(10 + 10)이다. 또 $c는 30(20 + 10)이다.
마지막으로 $d = 60(10 + 20 + 30)이 되었음을 금새 눈치챘을 것이다.
다음 강좌에서는 변수를 아름답게 사용하는 방법에 대해 배우겠다. 다른 뜻이 아니다. 능률적으로, 한마디로 말해서 쉽게 사용하는 방법에 대해 알아보는 것이다.
쉬운 것은 아름다운 것이다. 

9. [변수2]--사용법

변수란 어렵게 생각하면 한정없이 어렵지만 재밌게 보자면 쉽게 이해되기도 한다.
#############################
$a = "학교";
$b = "종이";
$c = "땡땡땡";
#############################
우리는 위에서 3개의 변수를 만들어 보았다.
이 3개의 변수로 하나의 문장을 만들어 보자.
$d = $a . $b . $c;
윗줄에서 맞춤표는 각각의 변수를 연결해 주는 표시이다.
따라서 $d에는 "학교종이땡땡땡"이 대입될 것이다.
뭔가 좀 이상하다. 띄어쓰기가 안된 것이다.
그럼 이렇게 한번 바꿔 보자.
$d = $a . " " . $b . " " . $c;
여기서는 각 변수를 연결하면서 그 사이사이에 " "를 추가한 것이다.
이건 아무 것도 아닌 것 같지만 스페이스 키를 변수 사이사이에 삽입한 결과를 보여준다.
이렇게 되면 $d에는 우리가 기대했던 대로 "학교 종이 땡땡땡"이 대입된다. 띄어 쓰기가 된것이다.
변수는 이렇게 사용하는 것이다. 얼마나 자유로운가?
좀더 재미있는 부분으로 옮겨 보자.
###################################
$a = 3
$a = $a + 3;
###################################
이렇게 정의하면 $a에는 당연히 6이 대입된다. 3 + 3이니까.
그러나 이건 $a += 3;과 같이 좀더 간단히 쓸 수 있다.
마찬가지로 $a -= 2;라고 하면 $a = $a - 2;와 같은 것이므로 1의 값을 나타낼 것이다.
그런데 만약 더하거나 빼려는 숫자가 1이라면 더 간단해진다.
$a++;
이렇게만 써주면 된다. 좀 편하게 살아 보자는 얘기다.
이건 비단 산술연산에만 해당하는 것이 아니다.
문자열 변수에서도 비슷하게 적용된다.
#################################
$a = "학교 종이 ";
$b = "땡땡땡";
#################################
여기서는 $a에 이미 스페이스키를 입력했으므로 첫번째 예에서와 같이 " "를 삽입하지 않아도 된다.
이걸 $c = $a . $b;라고 하면 $c에는 "학교 종이 땡땡땡"이 대입될 것이다.
그런데 가끔은 $a라는 변수를 계속 살려 가면서 확장해야 할 때가 있다.
이럴 땐 이렇게 정의해야 할 것이다.
$a = $a . $b;
그런데 이것도 성가신 일이다. $a를 두번 써야 하기 때문이다.
$a .= $b라고만 쓰면된다. 그러면 $a에는 "학교 종이 땡땡땡"이 대입된다.
이는 $a = $a + 3;을 $a += 3;이라고 입력해도 되는 것과 마찬가지이다. $a 와 3 사이의 연산자 '+'만을 '=' 앞으로 빼줌으로써 $a 그 자체에 3을 더한다고 표현하는 것과 같다는 것이다.
즉 문자열 변수들을 결합할 때는 "."를 사용하는데 이 마침표를 "="앞으로 빼줌으로써 $a 그 자체 뒤에 $b의 값이 추가된다는 것을 의미하는 것이다.
이런 것들을 사람들은 잔재주라고 부를 수도 있을 것이다.
그러나 PHP를 계속 공부하다 보면 이렇게 변수 값을 짧고 경쾌하게 대입하는 것에도 매료되곤 한다. 
 
10. [변수3]--폼과 변수

사용자의 브라우저와 서버가 교신하도록 하는 방법을 우리는 CGI(Common Gateway Interface)라고 한다. 좀 무식한 해석이기는 하나 CGI를 이해하는데는 도움이 될 것이다.
이 CGI에서 가장 핵심적인 것은 무엇일까?
나라면 폼(FORM), 양식이라고 말하고 싶다.
PHP는 이 폼과 관련해 커다란 장점을 갖는다.
PERL의 경우 사용자가 폼에 작성한 내용들이 서버로 넘어올 때 이를 해석하는 방법에 대한 정의가 있어야 했다.
이건 PERL이라는 것을 잘 모르는 사람들에게는 다소 다루기 힘든 그런 것 중 하나였다.
그러나 PHP는 이 점에서 사용자에게 커다란 혜택을 준다.
#######################################
<?
1: $aaaa = "LogIn";
2: <form name=form method=post action=login.php>
3: ID: <input type=text name=ID>
4: 비밀번호: <input type=password name=PassWord>
5: <input type=hidden name=test value=$aaaa>
6: <input type=submit value=로그인>
?>
#######################################
위의 양식은 아마도 login.php를 호출해서 사용자가 입력한 ID와 비밀번호의 값이 서버 데이터베이스에 있는 값들과 일치하면 로그인 성공, 일치하지 않으면 로그인 실패라는 결과를 가져올 것이다.
여기서는 아주 철저한 초보자를 위해서 첫번째 줄에서 $aaaa에 LogIn이라는 값을 의도적으로 대입시키고 그 변수를 5번째 라인에 삽입해 보았다.
이 경우 5행 hidden 필드의 이름(name)은 'test'이며 그 값(value)이 1행에서 정의한 'LogIn'이 될 것이라는 사실을 이미 알아 버렸다면 변수에 대해 충분히 이해한 것이다.
이제 피같은 돈을 좀 투자해서 PHP 서적을 한 권 사 열심히 읽어 보면 된다.
위의 양식에 따라 사용자가 ID와 비밀번호를 입력한 후 6행 '로그인' 단추를 누르면 모두 3개의 값이 login.php로 넘어간다.
이 3 값은 여러 개의 필드 또는 입력 단추 중 name이 있는 모든 필드의 값들이다.
text 타입(type) 필드인 ID와 password 타입 필드인 PassWord라는 이름(name)의 값들과 hidden 필드인 test의 값이 그것들이다.
지금껏 이토록 자잘한 설명은 해온 것은 아래의 사실을 밝히기 위해서이다.
login.php에서 이들 3개의 값은 각각의 필드에서 이름(name)으로 사용된 바로 그 이름 그대로의 변수명으로 호출된다는 점이다.
즉 login.php에 $ID(변수를 의미하는 '$' 표시 + 필드이름인 'ID')라고 적힌 부분이 있다면 그건 위의 양식 중 사용자가 ID 입력난에 적었던 그 값을 갖게 되고 $PassWord는 사용자가 PassWord 입력난에 적었던 그 값을 갖게 되며 또 $test는 hidden 필드의 값이자 제 1행에서 $aaaa에서 지정했던 그 값, 즉 'LogIn'을 의미하게 된다는 것이다.
이건 정말 아주 편리한 기능이라고 할 수 있다.
이런 기능으로 인해 우리가 얼마나 편리하게 login.php를 만들 수 있을지 곧 알게 될 것이다.
###########################################
<?
1: $id = "dddd";
2: $pw = "1234";
3: if (($ID == $id) && ($PassWord == $pw)) {
4: echo "당신은 정직한 사람이니까 들어 오십시요."
5: }
6: else {
7: echo "야 이 사기꾼와 왜 함부로 들어와!!";
8:}
?>
###########################################
얼토당토 않지만 login.php는 그저 이런 식으로만 만들어도 프로그램으로서의 어떤 행위를 하게 된다.
즉 1행에서 정의한 $id의 값(dddd)과 사용자가 입력한 $ID의 값이 일치하면서 2행에서 정의한 $pw의 값이 사용자가 입력한 $PassWord의 값과 일치하면, 즉 둘 다 일치하면 4행의 지시대로 "당신은 정직한 사람이니까 들어 오십시요."를 출력할 것이고 그렇지 않은 모든 경우(else)에는 7행의 지시 대로 "야 이 사기꾼와 왜 함부로 들어와!!"를 출력할 것이다.
3행 if 구문 속에 있는 &&라는 표시는 영어로 'and', 즉 '그리고'를 뜻한다.

진도가 너무 빨리 나갔다면 정말 죄송하다. 그렇게 느끼시는 분들은 '묻고 답하기'를 이용해 주시기 바란다.
하지만 먼저 이 부분을 정확히 이해해 보도록 노력해야 할 것이다.
이것은 CGI로서의 PHP를 사실은 동화책 수준으로 설명하기 위해 애쓴 것이다.
만약 이 부분을 정확히 이해했다면 PHP는 이제 완전히 내 손 안에 있는 것이다.

11. [변수4]--배열변수

구체적으로 설명한 것은 아니지만 우리는 정수형, 실수형, 문자형 변수에 대해 많은 경험을 했다. 그리고 이런 형태들은 그리 어려운 부분도 아닐 것이다.
헌데 사람들은 일단 배열변수라고하면 이해하는데 어려움을 겪고 만다. 때로는 배열변수 그 자체가 꼴보기 싫어서 프로그램 공부를 중단하는 경우도 있다.
오늘이 그 배열변수를 배우는 날이다.
배열 변수를 가장 간단히 만드는 방법은 array 함수를 사용하는 것이다.
############################################
$a = array(1,2,3,4,5);
############################################
이렇게 정의하면 변수 $a에는 하나의 배열이 대입된다.
여기서 주목할 것은 이 하나의 배열에는 그러나 각각의 인자마다 2개의 구성요소가 있다는 점이다.
하나는 배열 상에서의 순서이고 또 하나는 그 순서에 있는 배열의 값이라고 생각하면 될 것이다. 물론 이건 정확한 설명이 아닐 수도 있다. 하지만 우선 그렇게 이해하자.
보통 프로그램을 작성할 때는 배열 상의 순서를 $key로 그에 해당하는 값을 $val로 표시하는 경우가 많다.
위의 예어서 $a는 실제로는 아래와 같은 내용을 갖고 있는 것이다.($key-$val)
0-1
1-2
2-3
3-4
4-5
최초의 $key가 0부터 시작함에 주목하자. 모든 배열에서 그 순서를 특별히 지정하지 않았을 때(위의 예)에는 첫번째 인자의 Key 값은 0부터 시작해서 하나씩 올
라간다.

위의 예는 Key값을 디폴트 형태로 사용하라는 것이고 아래는 그 Key 값을 일일이 지정하면서 배열을 만든 것이다.
##########################################
$b = array("name" => "김이박", "age" => "25", "gender"=>"여성")
##########################################
여기서는 Key와 값을 일일이 지정하고 있다.
즉, name이라는 Key에는 '김이박'을 age라는 Key에는 '25'를 gender라는 Key에는 "여성"을 각각 대입하고 있는 것이다.
배열변수는 이런 방식으로 작성해도 된다. 사실 이 방식이 원초적인 방식일 것이다.
그렇다면 우리는 이 배열변수라는 어떻게 이용할 수 있는 것인가?

우선 배열 변수 개개의 인자를 호출하는 방법부터 알아 보자.
맨처음 예에서는 $a[3]과 같은 방식으로 호출한다.Key 값을 지정하지 않은 경우 최초의 Key 값은 0 이므로 이는 4번째 인자의 값인 4를 지칭한다.

두번째 예 역시 Key값을 이용해 호출한다. 그러나 여기서는 Key 값을 일일이 지정하고 있으므로 $b[name], $b[age], $b[gender]와 같이 지정한 키값을 []로 감싸줌으로 "김이박" "25" "여성"이라는 배열변수 내부 인자의 값을 알아 낼 수 있다.

이 배열 변수는 더욱 기막히게 사용되기도 한다.
이를 위해 while, list, each등 우리가 아직 배우지 않은 구문들이 적용되나 그런 구문에 대한 설명은 다음 기회로 넘기겠다.
########################################
<?
$a = array(1,2,3,4,5);
while ( list($key, $val) = each($a) ) {
$i = $key +1;
echo $i . ":" . $val . "번 타자<br>";
}
?>
########################################
여기서 요구하는 것은 $a의 각각의 요소(each)마다 $key와 $val이라는 두 인자를 리스트(list)로 만들어서 $a의 요소를 모두 체크할 때까지 반복해서 while 안에 있는 내용을 실행하라는 것이다.
우리는 여기서 $key에 1을 더한 $i를 만들었다. 이 경우 $key는 0부터 시작하기 때문이다.
이 구문을 실행하면 다음과 같이 출력될 것이다.
1:1번타자
2:2번타자
3:3번타자
4:4번타자
5:5번타자

여기서 배운 배열변수는 그야말로 가장 기본적인 것에 불과하다. 좀더 깊은 공부는 책을 사든 인터넷을 항해하든 스스로 배워 나가야 할 것이다. 

12. [변수5]--배열변수2

배열변수를 반드시 Array 함수로만 만들 수 있는 것은 아니다.
우리는 오늘 아주 평범한 문서를 이용 배열들을 만들고 활용하는 사례를 배울 것이다.
##################################
문서이름:test.txt
----------------------------------
이성수,70점,착한 아이
김철수,80점,순한 아이
박순이,90점,얌전한 아이
##################################
이런 문서가 있다고 치자. 이 문서를 우리는 배열화시키고 또 특정한 방식으로 표현할 수도 있다.
이때 가장 많이 사용되는 방법 중 하나가 explode 함수이다.
exprode 함수는 문자열을 당신이 지정한 특정한 문자열로 나누어 마치 배열처럼 저장한다.
위의 문서를 예로 들자면 이 문서에는 눈에 보이지 않는 어떤 기호가 줄마다 들어가 있다. '엔터' 키가 그것이다. 엔터키를 쳤으므로 줄이 바뀐 것 아닌가?
그러니 우리는 우선 이 엔터키라는 특정한 문자를 이용해 이 문서를 배열로 만들 수 있다.
$test_arr = explode("\n", text.txt);
explode 함수내에는 2개의 인자가 쓰었는데 하는 배열의 기준이 되는 특정한 문자(\n)가, 뒤에는 그 특정 문자로 나눌 대상이 각각 적힌 것이다.
이렇게 하면 각 줄은 $test_arr이라는 변수에 배열 형태로 저장된다.
첫줄의 key값은 0일 것이고 맨 마지막 줄은 2가 될 것이다.
따라서 $test_arr[1]에는 2번째 문장인 "김철수,80점,순한 아이"가 할당된다.
그런데 한 가지 주목할 점은 이 각각의 줄에는 또다시 배열로 나눌 수 있는 어떤 특정한 기호가 있다는 점이다. 바로 ',' 부호이다. 우리는 이 ','부호를 이용해 각각의 배열을 또 배열로 만들 수 있다.
$test_arr1 = explode(",",$test_arr[0]);
이렇게 해서 우리는 위 문서의 제일 첫줄을 다시 배열화하는데 성공했다.
만약 $test_arr1[2]라는 변수를 사용하면 우리는 "착한 아이'라는 값을 할당받게 되는 것이다.

이제 지난 번 강의에서 응용했던 while 구문을 이용해 이 문서를 멋지게 표현해 보자.
#############################################
<?
$test_arr = explode("\n", text.txt);
while ( list($key, $val) = each($test_arr) ) {
$test_arr2 = explode(",",$val);
echo $test_arr2[0] . "=" . $test_arr2[1] . "(" .$test_arr2[2] . ")<br>";
}
?>
먼저 test.txt를 각 줄로 나누어 배열화시킨 후 whie 구문에서 이 배열($test_arr)의 각각의 값($val)을 다시 ','로 나누어 배열화시키라고 명령하고 있다.
그런 다음 echo 명령으로 각 줄마다 배열화한 상태의 값들을 원하는 형태로 출력하라고 지정한 것이다.
결과는 아래와 같다.
####################################
이성수=70점(착한 아이)
김철수=80점(순한 아이)
박순이=90점(얌전한 아이)
####################################
오늘의 설명이 지난 강좌에 이어 배열변수를 이해하는데 다소나마 도움이 되었기를 바란다.
초보자가 쉽게 또는 조금 애쓴 결과 이해하는데 성공을 했다면 나는 이 강좌의 목적을 달성한 것이다.
그렇지 않다면 따끔한 충고 하나하나까지 열심히 귀담아 듣는 사람이 되고자 한다. 


13. [변수6]--전역/지역 변수

PHP 관련서적 중 변수에 대해 많은 지면을 할당하는 책을 별로 못본 것같다. 나도 관례(?)에 따라 이 글과 그리고 다음 글을 끝으로 변수에 대한 설명을 마치려 한다.
오늘 우리는 지역변수와 전역변수에 대해 간단히 배울 것이다.

지난 번에 변수와 함수에 대해 나름대로 정의해 본 적이 있다. 그때 함수는 어떤 기능을 포함하는 것이라고 설명했다.
그런데 우리는 이 함수와 같은 어떤 것을 직접 만들 수도 있다. 이때 사용되는 것이 function이다.

################################
1: $a = 1; $b = 100;
2: Test($a, $b);
3: function Test($a, $b) {
4: $c = $a + $b;
5: echo $c;
6: }
################################
여기서 우리는 Test라는 기능(function=함수)을 직접 만든 것이다. 이처럼 우리는 PHP 자체에 없는 기능들을 마음 대로 만들어서 사용할 수 있다.
위의 구문을 잘 살펴볼 필요가 있다.
1행에서 $a와 $b에 대해 정의하고 2행[Test($a,$b);]에서 $a와 $b의 값을 받아 Test라는 function을 실행하라고 명령한다. 그럼 3행 이하 function이 진행되면서 $c에는 1 + 100인 101이라는 숫자가 할당된다.
미리 말해 두자면 2행의 Test($a,$b)와 3행의 function Test($a,$b)라고 되어 있는 부분에서 function을 실행하라는 명령을 내릴 때의 변수 명($a,$b)과 이를 받는 function Test()구문에 들어가는 변수 명이 꼭 같아야 할 필요는 없다. 예를 들어 function Test($num1, $num2)라고 적어도 되며 이 때 $num1에는 $a의 값이, $num2에는 $b의 값이 넘어간다.
그러나 이건 사설이다. 위와 비슷한 구문을 다시 한번 만들어 보자.

################################
1: $a = 1; $b = 100;
2: function Test() {
3: $c = $a + $b;
4: echo $c;
5: }
6: Test();
################################
차이점은 function Test에서 변수값을 하나도 지정받지 못하고 있다는 점이다.
이럴 때는 어떤 결과가 나올까?
funtion은 독립된 하나의 기능이다. 여기서 중요한 것은 '독립된'이라는 점이다.
따라서 아무 것도 넘겨받지 못한 이런 상황에서는 $a도 $b도 function 그 내부에서는 아무 값도 갖지를 못하게 되는 것이다.이들 $a, $b, $c니 하는 것들은 funtion이라는 새로운 기능(함수) 안에서만 작용하는 '지역변수'들이기 때문이다.
이제야 말로 전역변수에 대해 설명할 때가 됐다.

################################
1: $a = 1; $b = 100;
2: function Test() {
3: global $a, $b;
4: $c = $a + $b;
5: echo $c;
6: }
7: Test();
################################
위의 예제와 이번 예제의 차이점은 3행이다. 여기서 global이란 전역변수가 선언된다는 점이다.
즉, $a와 $b는 새 기능 밖에서 선언됐지만 이를 전역변수로 바꿈으로써 function 내부에서 값을 할당받을 수 있도록 만든다는 것이다.

프로그램을 만들다 보면 줄수가 상당히 길어질 수 있다. 예를 들어 한 1000여줄 프로그램을 작성했는데 값자기 첫줄에서 선언한 변수를 이용해 fuction을 만들어야 할 필요가 생겼다면 우리는 아주 잽싸게 global을 써먹을 수 있을 것이다. 


14. [변수7]--재미있는 변수들

지난번 강좌에서 밝혔듯이 이 글로 변수에 대한 설명은 끝내려 한다.
여기서는 PHP만이 갖고 있는 아주 편리한 자체 변수들에 대해 조금 설명하고 지나 간다.

1)$PHP_SELF
예를 들어 지금 사용 중인 프로그램이 test.php라고 하면 그 test.php를 나타낸다.
하나의 양식에 <form name=molla method=post action=<? echo $PHP_SELF; ?>>라고 쓰면 이 건 <form name=molla method=post action=test.php>라는 뜻이다.

2)$REMOTE_ADDR
서버에 접속한 IP 주소를 알려 준다. '201.111.222.333'과 같은 형식으로..

3)$SERVER_NAME
아마 우리 사이트에 접속했다면 이 변수는 'phpfree.co.kr'을 나타낼 것이다.

4)$HTTP_REFERER
Refer(참조) 사이트를 보여 준다. 즉, 야후 검색결과의 링크를 통해 PHP Free에 접속했다면 http://www.yahoo.co.kr/..... 등으로 나타난다.

5)$SCRIPT_NAME
현재 파일의 이름을 나타낸다. 지금 보고 있는 문서의 이름이 test.html이라면 'test.html'이 그 값이다.

6)HTTP_USER_AGENT
방문객의 브라우저나 운영체계 등에 대한 정보를 알려 주며 출력값은 아래와 같은 형태로 나타난다.

Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)

Windows 98의 운영체계 하에서 MS IE 5.0을 통해 접속하고 있음을 알 수 있을 것이다.

이밖에도 많은 자체 변수들이 PHP에 있다.
그러나 일일이 설명하기에는 양도 많고 또 그 변수명만 보아도 대충 무얼 보여주는 것인지 가늠이 가는 것들이므로 세부설명은 이것으로 줄이겠다.
아래에 그런 변수들 몇개를 열거하면서 이 글을 끝낸다. 초보자들에게 이건 일종의 숙제일지도 모른다.
무슨 뜻의 변수들인지 한번 직접 궁리해 보시기를 바란다.

$GATEWAY_INTERFACE
$SERVER_PROTOCOL
$SERVER_PORT
$REQUEST_METHOD
$PATH_INFO
$PATH_TRANSLATED
$QUERY_STRIGN
$AUTH_TYPE
$CONTENT_TYPE
$CONTENT_LENGTH
$HTTP_ACCEPT
.
.



15. 쿠키 사용법

PHP에는 쿠키를 아주 자연스럽게 활용하는 함수가 포함되어 있다.
쿠키는 서버의 정보를 사용자 브라우저에 저장하는 것으로 실제로는 windows 디렉토리 내의 Temporary Internet Files라는 디렉토리에 저장된다.
이 쿠키를 사용함으로써 서버는 사용자가 몇시에 접속했는지 알 수 있고 또 몇 분 또는 몇 시간이 지나면 더이상 사용자로서의 권한을 가질 수 없도록 할 수도 있다. 물론 이외에도 많은 정보를 저장하고 사용할 수 있는 것이 쿠키이다.
일부 불량스런 웹마터스들은 이 쿠키를 악용하는 경우도 있다고 들었다. 만약 그럴 생각이 아니라면 아래 글은 읽어도 좋다.

쿠키 함수는 아래와 같이 호출된다.

SetCookie(Name,Value,Expire,Path,Domain,Secure);

하지만 쿠키함수를 사용하면서 이 모든 인자들을 일일이 적어 주는 사례는 드물다.
중요한 것은 앞의 3가지, 이름과 그 값, 그리고 만료시간일 것이다.
아래 쿠키를 사용하는 예를 한번 들어 보겠다.

#######################################
$username="aaaa";
SetCookie("ID", $username,time()+21600);
########################################

여기서는 보시다시피 3개의 인자만 사용했다. 이름과 그 값, 그리고 만료시간이다.
자세히 설명하면 이름은 'ID"이고 그 값은 $username에서 지정한 'aaaa'가 될 것이다. 그리고 만료시간은 time()+21600이다.
전혀 어렵지 않다. time()은 현재 시간을 알아내는 하나의 방법이고 이 현재시간에서 21600초, 즉 6시간(60x60x6)이 지나면 쿠키를 만료하라는 뜻이다.
이런 쿠키는 회원제를 사용하는 프로그램에서 유용하게 활용될 수 있다. 아마도 aaaa라는 ID를 갖고 있는 회원은 6시간후에 쿠키가 만료되므로 다시 로그인해야 할 것이다.
그런데 만약 로그아웃하는 단추를 만들려면 어떻게 할까? 아래는 아주 간명한 사례이다.

###############################
setcookie("ID", "", time()-1);
###############################

ID의 값을 무참히 지워 버리고 만료시간을 현재시각에서 1초 빼버림으로써 windows 디렉토리 Temporary Internet Files 안에 있는 쿠키 파일을 쓰잘데 없는 것으로 환원해 버리는 것이다.
프로그래밍을 하면서 로그아웃 단추에 이런 방법을 사용하는 경우는 꽤 많다. 그럼 이 사용자는 다시 로그인해야 한다.
조금 색다른 쿠키 사용법을 한번 더 들어보자.

#######################################
$username="aaaa";
SetCookie("ID", $username,0);
########################################

만료시간을 0으로 했다는 것 외에는 맨 위의 예와 다를 바가 없다.
이 쿠키는 무엇을 의미할까?
접속시간이고 뭐고 다 필요없고 브라우저를 끄면 쿠키를 더이상 사용할 수 없게 하라는 뜻이다.
조금 이해가 됐는지 모르겠다.

그러나 이 쿠키를 사용함에 있어서 반드시 알고 넘어가야 할 것이 있다.
쿠키는 브라우저로 보내는 모든 정보중 제일 앞에 들어가야 한다는 것이다.
아래의 예를 보자.

#######################################
<?
$a=qwer;
echo "<html><head><title>테스트</title></head>
<body>";
SetCookie("User", $a, time()+3600);
echo "쿠키 만료시간은 앞으로 1시간 후입니다<body></html>"
?>
#######################################

이렇게 해서 쿠키가 생성됐다고 생각하는 것은 완전히 오산이다.
SetCokkie가 브라우저로 표현되는 모든 정보의 맨앞에 있지 않기 때문이다.
이 경우 브라우저는 '<html><head><title>테스트</title></head>
<body>'를 먼저 뿌린 후 쿠키 작업에 들어 가라는 것인데 이건 안된다. 쿠키 명령은 최우선으로 들어가야 한다. 바로 아래와 같은 방식으로 사용돼야 하는 것이다.

#######################################
<?
$a=qwer;
SetCookie("User", $a, time()+3600);
echo "<html><head><title>테스트</title></head>
<body>쿠키 만료시간은 앞으로 1시간 후입니다<body></html>"
?>
#######################################
이 경우에는 브라우저에 '<html><head>...'등이 뿌려지기 전에 쿠키가 선언됐다.
따라서 이 쿠키는 작동을 할 것이다. 

16. 덧셈 뺄셈???

오늘은 소위 '연산자'에 대해 공부한다.
덧셈 뺄셈 뭐 그런 종류지만 여기에도 몇가지가 있다.
일단 산술 연산자가 있을 것이다. 아래는 산술연사자의 보기이다.

##############################
1: $a + $b; 덧셈
2: $a - $b; 뺄셈
3: $a * $b; 곱셈
4: $a / $b; 나눗셈
5: $a % $b; 나머지
##############################
대부분 이해가 갈 것이다. 다만 5행의 나머지 연산이 초보자에게는 약간 혼란스러울지 모르겠다.
예를 들어 $a = "21"이고 $b = "5"라고 정의했다고 치자 이 경우 $a % $b의 값은 21을 5로 나눈 후 나머지 값인 1이다.

다음으로 문자열 연산자를 들 수 있다. 그러나 이 부분은 예전에 이미 배웠다.

##############################
$a = "학교 종이 ";
$b = "땡땡땡";
$c = $a . $b;
###############################
이런 식으로 쓰인다. 물론 이때 $c의 값은 "학교 종이 땡땡땡"이다.

대입연산자라는 것도 있다. 이것도 사실은 지난번에 배운 것이다.
###############################
1)$a += 4; (설명: $a = $a + 4)
2)
$b = "학교 종이 ";
$c = "땡땡땡";
$b .= $c; (설명: $b = $b . $c)
################################

지금까지 설명한 연산자들은 얼마전 강좌([변수2]--사용법)에도 일부 거론되어 있으므로 함께 읽어 가면 도움이 될 것같다.

이번에는 프로그램에서 가장 중요시되는 '논리연산자'에 대해 공부한다.

간단한 예를 들어 보자.
'$a and $b'는 무엇을 뜻할까? 이는 $a가 참이면서 $b도 참일 때만 '참값'을 갖는다는 의미이다. 만약 $a나 $b 둘 중 하나라도 또는 둘 모두 거짓이라도 이건 '거짓값'을 갖게 된다.
참과 거짓은 쉽게 말해서 진짜냐 가까냐 그런 뜻인데 다음 강좌에서 다시 다루게 될 것이므로 지금은 그냥 따라와 주기만을 기대한다.
아래에 논리 연산자의 예들을 몇개 적어 보겠다.

#################################################
1: $a or $b; (설명: $a나 $b 중 하나만 참이면 참)
2: $s xor $b; (설명: $a와 $b 중 하나만 참이어야 참)
3: !$a; (설명: $a가 거짓이면 참)
4: $a && $b; (설명: $a와 $b가 모두 참이어야 참)
5: $a || $b; (설명: $a와 $b중 하나만 참이면 참)
#################################################

이번에 설명한 '비교 연산자' 역시 프로그램을 만드는데는 아주 소중하게 응용되는 것이므로 자세히 읽어 주기 바란다.
비교 연산자는 말 그대로 양쪽을 비교하는데 쓰는 연산자이다.
아래에 예를 적어 나가면서 직접 설명하겠다.

#################################################
1: $a == $b; (설명: $a가 $b와 같으면 참)
2: $a != $b; (설명: $a가 $b와 틀리면 참)
3: $a < $b; (설명: $a가 $b보다 작으면 참)
4: $a > $b; (설명: $a가 $b보다 크면 참)
5: $a <= $b; (설명: $a가 $b보다 작거나 같으면 참)
6: $a >= $; (설명: $a가 $b보다 크거나 같으면 참)
#################################################
이 정도이다.
여기서 조금 헷갈리기 쉬운 것은 1행이다.
비교 연산시에는 '='이 아니라 '=='이 사용된다는 점을 확실히 기억하고 넘어가야 한다.
만약 $a = $b라고 적는 다면 $a의 값이 존재(참)하고 $b의 값 역시 존재(참)한다면 이들 두 변수의 값이 실제로는 서로 달라도 참을 나타내게 될 것이다.

※헛소리
5행과 6행의 비교연산자를 사용할 때 =>나 =<를 사용하면 아무 소득도 없을 것이다. 순서가 틀렸기 때문이다. '<'나 '>' 부호가 먼저오고 그 다음에 '='부호가 와야 한다. 이건 수학에서 이런 식으로 사용되는 문자셋을 기억한다면 그 원리를 금방 눈치챌 수 있다.
'≤'('<='를 나타내는 특수부호를 찾지 못한 연유로 이 기호를 사용했다.) 기호를 보자 위에 먼저 꺽쇠(<,>)기호를 쓰고 그 다음에 '='기호를 사용하지 않는가?
따라서 이 순서에 따라 <=나 >=로 표기를 해야 원하는 결과를 얻을 수 있다. 

17. 마지막 준비운동

이제 PHP의 기본에 관해서 많이 배운 듯하다. 물론 부족한 점이 많다. 하나하나에 대해 장대하게 설명하기 보다는 그저 이해나 하고 너머 가자는 그런 강좌가 아니었나 싶다.
그래도 진도는 나가야 하지 않겠는가?

다음 시간부터는 프로그래밍에 있어서 가장 중요한 제어문과 반복문 등에 대해 설명할 것이다. 이 부분은 여러 편의 시리즈로 작성돼야 한다. 그리고 아주 정확히 이해해 나가야 프로그래머로서, 또는 프로그램을 최소한 이해는 할 수 있는 사람으로 남게 될 것이다.
오늘은 그 마지막 준비운동으로 PHP의 유용한 기능에 대해 몇가지 선보임으로써 읽는이의 흥미를 더욱 배가해 보련다. 완전히 내 개인적인 생각이지만...

1)HTTP 인증기능
Header() 함수를 사용함으로써 사용자에게 ID와 비밀번호를 곧바로 요구하는 기능이다. 이런 기능은 사용자 인증이 필요한 경우에 매우 간단하면서도 요긴하게 응용된다.

2)쿠키 기능
지난 글에서 setcookie에 대해 약간 설명하고 지나간 적이 있다. 바로 그 편리한 기능이다.

3)GIF 생성기능
언어로 그림을 만들 수 있다니? 놀라운 일이 아닌가?
아주 재미있긴 하지만 이 기능을 사용하려면 PHP 컴파일시 GD 라이브러리를 사용할 수 있도록 환경설정을 해 주어야 한다. 이 부분에 대해서는 '서버셋팅 강좌'에서 설명이 이루어지기를 기대한다.
만약 설명이 없다면 아예 '묻고 답하기/서버셋팅'에 질문을 올려도 될 것이다.

4)파일 업로드 기능
PHP를 이용하면 파일 업로드가 자유롭다. 텍스트건 압축파일이건, 그림 파일이건 아주 자유롭게 파일을 서버에 올릴 수 있다. 얼마나 쉬운지는 앞으로 설명할 기회가 생길 것이다.

5)다양한 DB 지원
PHP가 지원하는 DB는 Mysql, mSQL,PostgreSQL, Sybase, Informix, dBase,Velocis등 모두 열거하기 힘들 정도로 많다. 이거야 말로 PHP를 사용해야 하는 가장 중요한 이유중 하나일 것이다.
따라서 한푼없이 공부하는 학도들에게는 한푼도 들지 않는 PHP와 MYSQL을 함께 공부하는 것이 가장 바람직할 것이다.
PHP와 MYSQL은 찰떡궁합이라고들 한다.

6)외부 파일 이용 기능
PHP는 include나 require 함수를 이용해서 파일 그 자신이 아닌 외부의 파일을 쉽게 끌어다 쓸 수 있다.

require("other.php");
위와 같이 적으면 지금 사용 중인 PHP프로그램은 자기 옆에 있는 other.php를 호출해서 그 속알맹이를 낱낱이 해부해서 이용할 수 있을 것이다.

위에서 설명한 것들은 대부분 PHP의 장점이라고 불리는 몇가지들이다. 이밖에도 '왜 PHP여야 하나?'라고 누군가 질문했을 때 수다 떨 내용은 지긋지긋하게 많다.
자! 어떤가?
PHP란 배워 볼 어떤 가치가 있는 그런 언어가 아닌가?
다음 강좌부터는 PHP라기보다는 대개의 언어에서 사용되는 제어 또는 반복 방식에 대해 공부할 것이다.
이런 내용은 비단 PHP라는 언어 하나에서만 응용되는 것은 아니므로 앞으로 PERL을 배우려는 사람이나 아니면 HPH라는 새 언어를 아예 만들어 보려는 사람들이나 열심히만 공부해 나간다면 남 주는 일은 결단코 없을 것이다. 

18. 잊은 것--참과 거짓

한가지 잊은 것이 있다.참과 거짓에 대한 설명이 바로 그것이다.
PHP를 포함한 대개의 언어에서 참(True)과 거짓(False)은 무엇을 뜻하는지 먼저 집고 넘어가야 한다.
언어에서 말하는 논리는 거짓말이나 참된 말이냐를 따지는 게 아니다.
$a = "디렉터는 PHP 최고의 고수이다."
여기서 디렉터는 내 ID이다. 따라서 $a로 지정된 알맹이는 순전하고도 완전하고도 새빨간 거짓말이다.
하지만 $a에 대해 참, 거짓을 따지자만 이건 참이다.
$a에 분명한 정의가 내려졌기 때문이다.
반면에 $b = "";이라고 정의하면 어떻게 될까.
이건 거짓이다. 아무 것도 정의되지 않았으므로...

참과 거것을 나타내는 간단한 숫자가 있다. 1과 0이다.
1은 참 0은 거짓이다.

만약 다음과 같은 구문을 작성했다고 치자
########################################
$a="1234";
if ($a = 1) {
echo $a"
}
else {
echo "거짓입니다";
}
#######################################
이 경우 $a에는 1234라는 값이 대입되어 있으므로 참이다.
다음으로 if ($a = 1)이라고 묻는 구절이 있는데 이건 $a가 참일 경우 어떠어떤 행위를 하라는 것이고 else에서 그 게 아니면(즉, $a가 거짓이면) 그 이하를 실행하라는 것이다.
이 경우 $a는 참이므로 1234를 출력할 것이다.

다음과 같이 적어도 참과 거짓에 대한 충분한 결과를 얻을 수 있다.
#################################################
1: if ($a) { (설명= '$a = 1'에서 "= 1"을 뺀 형태로 이것도 $a가 참이냐고 묻는 것과 같다.
2: if (!$a) { (설명=$a가 거짓이면)
3: if ($a = 0) { (설명=$a가 거짓이면)
##################################################
이런 여러가지 방식으로 변수가 참이냐 아니냐를 묻게 된다.
지난 강좌에서도 지적했지만 3행의 경우 if ($a == "0")이라고 쓴다면 이건 참, 거짓을 묻는 것이 아니다. $a의 값과 0의 값을 비교해서 만약 $a가 실제로 "0"이라는 숫자로 정의되어 있으면 참이 되는 그런 연산이다.
참과 거짓에 대해 간단하게 설명했다. 다음 글부터는 본격적으로 프로그램을 다루는 방식에 대해 하나하나 꼼꼼히 다루게 될 것이다.

19. [조건과 반복1]--while

이 제목의 첫번째 글은 if여야 할 것이다. 그러나 while로 바로 간다.
if 구절에 대해서는 이 전에 이미 설명을 했는데 그 정도면 충분할 것 같다.

###############
while (조건) {
처리
}
################
while 구문은 이런 식으로 호출한다.
위의 구문은 어떤 '조건'이 충족하는 동안 반복해서 어떤 '처리'를 하라는 뜻이다.

아주 간단한 예부터 시작하자.
###########################
<?
1: $a = 1;
2: while ($a<=10) {
3: echo $a . "<br>";
4: $a++;
5:}
?>
############################
우선 while 구문 밖에서 $a = 1이라고 선언을 했다.
그런 다음 while 구문에서 $a가 10보다 작거나 같은 때까지, 즉 그런 조건에 충족될 때까지 '$a ."<br>"'을 출력하라고 명령한다.
그럼 $a는 최초에 1이었으므로 1을 출력할 것이다.
그 밑에서는 다시 $a++; 명령을 줌으로써 현재의 $a값에 1을 더하라고 명령한다.
결과는 2일 것이다. 따라서 아직 while의 조건($a가 10보다 작거나 같을 때까지)을 충족시키므로 while 구문은 종료되지 않은 상태에서 while 구문이 처리하라고 지시한 행위를 계속 하게 되는 것이다.

이 구문을 실제로 실행하면 어떤 결과가 나올까? 아마도 다음과 같은 결과가 나올 것이다.
---
1
2
3
4
5
6
7
8
9
10
---

약간 차이가 나는 구문을 보자
###########################
<?
1: $a = 1;
2: while ($a<=10) {
3: $a++;
4: echo $a . "<br>";
5: }
?>
############################
3행과 4행의 순서가 고작 바뀌었을 뿐이다. 그러니 결과도 똑같으리라 짐작할 수 있다. 하지만 틀렸다.
여기서는 while 구문 밖에서 $a =1 이라고 선언한 후 while 구문 안에서 echo 명령에 앞서 $a++을 먼저 했다. 즉, echo 명령 앞에 $a의 값인 1에 1을 먼저 더한 꼴이므로 최초로 출력될 값은 1이 아니라 2가 되는 것이다. 출력 결과는 다음과 같다.
---
2
3
4
5
6
7
8
9
10
---

while에는 또다른 사용법이 있다. 위와는 달리 조건문에 앞서 처리문을 적는 것이다.
그 사용법이 다음과 같다.
#################
do {
처리
}
while(조건)
#################
이 역시 while에서 지정한 어떤 '조건'이 충족되는 한 어떤 '처리'를 하라는 그런 뜻이다.
한가지 다른 점은 do(처리) 구문이 먼저 나온 것이다.
따라서 이런 구문에서는 while의 조건이 어떤 것이든, 즉 그 조건이 충족되든 말든 do 실행문은 먼저 처리가 된다는 뜻이다.
아래의 간단한 사례를 보자.
#############################
1: $a = 0;
2: do {
3: echo $a . "<br>";
4: $a++;
5: }
6: while (($a >= 1) && ($a <10))
#############################

while 구문을 통해 $a가 1보다 크거나 같고 10보다 작을 때까지 do 구문을 처리하라는 것이다.
그러나 여기서 do는 글의 순서상 do 구문 내의 처리 명령을 수행한 다음에 while을 볼 수 밖에 없지 않은가?
while이 do보다 밑에 있으니 말이다.
while 구문은 $a가 1보다 크거나 같아야 하지만 3행에서의 $a값은 1행에서 선언된 그 값, 즉 0이다.
따라서 while 내부의 조건을 전혀 충족시키지 못한다.
하지만 do 구문은 터프하게 0이라는 값을 출력시킬 것이다. 그 다음 while 구문을 읽고 거기에 따라 일처리를 할 것이다. 따라서 위의 예는 다름과 같은 출력 결과를 보여 준다.
---
0
1
2
3
4
5
6
7
8
9
---
이해가 가는지 모르겠다.
위의 예들은 while 구문과 관련된 아주 기초적인 내용들이었다.
이 아주 기초적인 것을 이해하지 않고 지나가면 첩첩산중의 while 구문은 결코 넘지 못할 벽이 될 것이다.
반면에 이 글만 완전히 이해했다면 아무리 잔재주를 부린 while 구문도 능구렁이처럼 잘도 넘어 갈 것이다. 

20. [조건과 반복2]--for

한마디로 말해서 for나 while이나다.
그러나 for는 그 구절에 3가지 인자를 포함시킴으로써 '어디부터' '어디까지'를 좀더 편하게 지정할 수 있다.
for 구문의 예이다.
##############################
for(시작지점;종료지점;조건) {
처리
}
###############################
while과 마찬가지로 for()안의 조건이 충족되는 동안 { 처리 }를 하라는 뜻이다.

하나의 예를 든다면 이해가 훨씬 잘 될 것이다.

################################
1: for($i=1; $i<=; $i++) {
2: echo $i . "꼬마 인디언<br>";
3: }
################################
위의 단 한가지 예로 우리는 for에 대한 설명을 끝낼 수 있다.
1행의 for () 구문을 잘 보자.
앞서 우리는 for 다음의 괄호 속에는 '시작지점;종료지점;조건'이라는 인자가 들어간다고 배웠다.
따라서 제일 첫 인자인 '$i=1'은 시작지점이고 그 다음 '$i<=10' 종료지점이다. 그리고 맨 마지막 '$i++'는 시작 지점과 종료 지점 사이에서 반복해서 이루어 져야 할 조건이다.
해석하자면 이렇다.$i는 1일 때부터 $i가 10보다 작거나 같을 때까지 $i에 1씩 더하는 조건 하에서 '{ }' 안에 있는 처리문을 실행하라는 것이다.
$i가 최초에 1이고 마지막으로 10보다 작거나 같을 때까지 $i에 1씩 더하라는 것은 무슨 뜻일까? 즉, 어느 범위까지 일까?
1부터 10까지의 숫자를 나타낼 것이다.
그렇다면 처리문에서는 최초에 $i가 1이므로 처음에는 '1($i의 값)꼬마 인디언'이라는 문구를 출력하고 다시 for 구절로 돌아가 최초의 $i값(1)에 1을 더한 후 '2($i의 현재 값)꼬마 인디언을 출력한다. 결과적으로 다음과 같은 출력을 다하고 나서야 for 구절의 범주에서 벗어나므로 for 구절을 떠나 다음 문장으로 넘어 갈 것이다.
#############################
1꼬마 인디언
2꼬마 인디언
3꼬마 인디언
4꼬마 인디언
5꼬마 인디언
6꼬마 인디언
7꼬마 인디언
8꼬마 인디언
9꼬마 인디언
10꼬마 인디언
############################

많은 프로그래머들은 이같은 for 구문을 쓸 때 $i라는 것을 사용한다. 그래서 초보자들은 이렇게 오해할 수도 있을 것이다.
'아! for 구문에는 $i만 써야 되는구나'
하지만 그렇지 않다. $z를 써도 되고 $zzzzzzzz_qqqqqqqqqqq_555555555555와 같이 점술적이며 또 천문학적인 변수를 사용해도 상관없다.
물론 $i를 사용하는 것도 좋은 것이다. 

21. [조건과 반복3]--foreach

foreach는 PHP3까지는 없었던 PHP4의 새 구문이다.
기능은 PERL등 기타 언어와 비슷할 것이다.
for와 whie 구문이 어떤 '조건'일때까지 어떤 '처리'를 하라는 뜻이라면 foreach는 어떤 조건 '각각'에 대해 어떤 처리를 하라는 좀더 명확하고 제한된 문법일 수 있다.
foreach를 실제 사용하는 방법에는 2가지가 있다.
아래에 그 예를 들어 본다. 여기서 $arr에는 '1,3,4,8,9'라는 배열(Array)값이 저장되어 있다고 친다.

#########################################
사례1
#########################################
1: foreach ($arr as $value) {
2: echo "값 => $value<br>";
3: }

#########################################
사례2
#########################################
1: foreach ($arr as $key => $value) {
2: echo "Key => $key, 값 => $value<br>";
3: }

이 2가지 사례가 foreach의 응용법이다.
먼저 사례 1을 보자. 앞서 말한 대로 $arr에는 '1,3,4,8,9'라는 배열이 지정돼 있다. 이 배열을 어떤 반복문에 집어 넣을 때 단순히 for나 while을 사용하기에는 어려움이 따를 것이다. 이때 foreach를 멋지게 사용해 보자.
1행에서 foreach는 $arr를 $value로서('as') 받아들이게 하고 그 각각에 대하여(foreach) '{ }'로 감싸여 있는 처리사항을 실행하라고 명령하는 것이다.
따라서 사례1의 결과 값은 아래와 같을 것이다.
-----
값=>1
값=>3
값=>4
값=>8
값=>9
_____

사례 2는 다소 복잡해 보이지만 우리가 과거에 배웠던 배열변수에 대해 약간만 상기를 한다면 그리 어려울 것도 없다.
이 예에서는 $arr를 '$key => $value'에 대응시키고 있다. 지난번에 배웠던 배열변수에서는 특별히 키값을 지정하지 않은 경우 즉, $arr과 같은 변수에서는 맨처음 키값은 0이 되고 그 다음부터는 1씩 증가하게 된다고 설명했을 것이다. 여기서 $arr의 키와 값은 아래와 같은 관계를 성립시킨다.
-------
0 => 1
1 => 3
2 => 4
3 => 8
4 => 9
-------
물론 앞에 나온 것이 키이고 뒤에 나온 것이 그 키에 대응하는 값이다.
사례 2는 $arr를 이처럼 키와 값으로(as) 받아 들이게 하면서 그 각각에 대해(foreach) '{ }' 내부의 처리사항을 실행하라는 그런 뜻이다.
따라서 출력되는 결과는 아래와 같을 것이다.

------------------
Key => 0, 값 => 1
Key => 1, 값 => 3
Key => 2, 값 => 4
Key => 3, 값 => 8
Key => 4, 값 => 9
------------------

조건과 반복은 프로그래밍에 있어서 아주 중요한 것이다. 나는 이 중요한 부분을 아주 초보적인 사례들을 들어가며 설명하는데 주력했다.
그러나 이 초보적인 사례들만 제대로 이해해도 프로그래머가 되는 대는 아무런 지장이 없다. 다만 얼마나 확실히 이해하려 애썼는지 또는 실제로 얼마나 이해했는지는 중요할 것이다.
우리는 다음 강좌에서 이 조건및 반복과 관련된 몇가지 자질구레한 것들을 공부하고 고무신 거꾸로 신은 군발이 여자 친구처럼 여기서 영영 사라져 버릴 것이다.<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:16:08 PHP & HTML에서 이동 됨]</div>
추천
0

댓글 2개

전체 1,171
개발자팁 내용 검색 PHP에서

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT