php와 비베(VBA) 어플을 다루다가 - 실력은 형편없지만 - asp, sql2005, 닷넷을 다루고 있는데, 역시 프로그래밍은 기라성같은 고수 선배님들의 코드를 들여다보고, 거기에 사용된 함수, 클래스를 찾아서 구조와 원리를 파악하고 손가락으로 열심히 키보드를 두드려서 코딩하고 결과내보고 벌레잡기(디버깅)를 하는 과정에서 성장됨을 또 한번 깨쳤다.
산 정상을 향해 올라가는 것 처럼, 함수 하나 클래스 하나 인클루드 된 파일 하나 이렇게 진도를 나아가다 보니 어느덧 나 자신도 고수가 된 듯 착각속에 빠지기도 했다. 갈 길은 먼데 말이다. ^^
헬기 조종간에서 손을 놓은지 벌써 7년을 넘기고 있는데 그동안 이런 일, 저런 일 하면서 프로그램을 다시 만지고 있는 상황. 중학교 2학년 때 부터 시작한 컴퓨터. 항공과 컴터는 오늘까지 나하고 질긴 인연을 같이 해 오고 있지만 사실 세상이 알아주는 실력은 아니다.
공부 또한 토목공학, 기계공학, 전자계산학, 항공(조종), 사이버포렌식(Cyber Forensics)을 두루 거쳤으나 아직 매듭지은 것은 없다. 아니 이제 한 매듭 지으려 하는데, "강력한 플밍 실력"이 관문으로 나를 기다리고 있는 것이다.
asp는 php를 쓸 때와 달리 마이크로 소프트(이하 MS) 제품군에서 다양하게 응용되는 힘을 발휘하는 장점이 있는데 이를 이용해보면서 MS를 무조건 욕했던 내가 사실 부끄러워지기는 했다. 그러나 MS 판매정책에 대한 점수는 F를 주고 싶다.
아무튼 고수열전같은 분위기로 끌고 가면 곱게 성장한 '강단파'와 거칠게 성장한 '강호파'로 일단 나눌 수 있는데 양단의 경험을 한 부류도 있고. 여기서 '플밍(프로그래밍)의 고수'를 가린다고 하면 누가 최고의 고수, 승자가 될 까? 이론과 실전을 차분하게 공부해온 강단파 출신이 승자가 될 수도 있다. 거칠게 현장에서 배우고 익힌 실력으로 무장한 강호파 출신이 승자가 될 수도 있다. 또 강단과 강호를 넘나들며 기량을 자랑하는 자가 승자의 위치를 굳힐 수도 있다.
내가 체험한 결론은 이렇다. "삼성 애니콜 휴대폰의 정밀함 처럼, 끝까지 질기게 달려붙어 정밀하게, 치밀하게, 지독하게, 소 처럼 꾸준하게 앞으로 나아가면서 마침내 일을 매듭지어버리는 자가 진정한 고수이고 진정한 승자다."
"플밍은 학사, 석사, 박사 학위로 하는게 아니고 열정과 끈질김 하나로 매듭짓는 인생의 예술이요 철학이요 멋 이다."
필자가 다운로드 받아 사용한 프로그램은 아래와 같습니다. mysql-5.0.67-win32.zip apache_2.0.63-win32-x86-no_ssl.msi php-5.2.8-win32-installer.msi ZendOptimizer-3.3.3-Windows-i386.exe phpMyAdmin-3.1.1-all-languages
윈도우 iis는 기본포트 80으로 하였습니다.
다음은 APM 설치 (리눅스에서도 아래의 설치 순서를 따르는게 좋습니다.) 1. 먼저 mysql을 설치합니다. - 설치과정에서 root 비밀번호를 정해줍니다. -참고로 리눅스에서는 설치 후 mysqladmin -u root password 비번 해서 관리자 비번을 바꿔주는거 기억나시죠? ^^ 윈도우 환경에서는 설치과정에서 지정해주면 됩니다.
2. 아파치웹서버(Apache 2.0) 설치 - 윈도우 서버 2008에서 Apache 2.2 버전 구동에 문제가 있어서 2.0 버전으로 설치하였습니다. 고수님들 의견에서는 2.0은 보안성에 문제가 있기 때문에 2.2 버전 사용을 권장하였습니다. 참고하시기 바랍니다. - 설치 후 가장 중요한 것이 http.conf 수정이 되겠지요 ~ 우선 아파치 웹서버를 스톱(stop) !! - httpd.conf 에서 수정한 내용은 아래와 같습니다. Listen 8080 <-- 디폴트값은 80인데 이렇게 사용하고픈 포트번호를 입력 ServerName 127.0.0.1:8080 DocumentRoot "C:/apm/Apache2/htdocs" <-- 원하는 폴더 경로를 지정. 백슬래시(\)사용하지 말고 슬래시(/)를 사용해야 합니다. - 아파치 웹서버를 다시 구동시킵니다. - 위의 DocumentRoot 폴더에 임의의 html파일 a.html 하나를 만들어서 브라우저 주소창에 127.0.0.1:8080/a.html 해서 내용이 나오면 아파치 구동은 잘 되는 것입니다.
3. php 5.2.8 설치 - 가급적 아파치 웹서버를 중지시킨 후 진행합니다. - 설치과정에서 http.conf 파일이 있는 위치와 php.ini 파일이 있는 위치를 올바로 지정합니다. - 설치가 끝나면 http.conf 파일에 아래 항목이 추가된 것을 볼 수 있습니다. #BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL PHPIniDir "C:/apm/php5/" LoadModule php5_module "C:/apm/php5/php5apache2.dll" #END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
- php.ini 파일을 열어서 아래 항목을 수정합니다. short_open_tag = On <-- off 되어 있으면 <?php 구문 ?> 과 같이 사용해야 합니다. on 되어 있어야 <? ?> 이렇게 사용할 수 있는 것이지요.
- 아파치 웹서버를 다시 실행시킵니다. - DocumentRoot에 임의의 a.php 파일을 만들고 127.0.0.1:8080/a.php를 브라우저 주소창에 입력하고 php 구문이 실행되는지 확인합니다.
4. ZendOptimizer 설치 - 설치과정에 나오는 대로 지정만 해주면 끝 !
5. phpMyAdmin 설치 - 설치라기 보다 압축을 푼 파일을 DocumentRoot 폴더 안에 가져다 두기만 하면 됩니다. - 127.0.0.1:8080/phpmyadmin 하면 잘 뜹니다 !! ^^
6. 열심히 php 작품을 만들면 되겠지요 ?? ^^ - 프로그램을 만들면서 시간을 충분히 내서 httpd.conf php.ini my.ini 파일 내용에 나와있는 개념을 꼭 ~! 꼭 ~! 숙지하기 바랍니다. - php 사이트 보안성을 높이기 위해서는 .htaccess 를 잘 다루는 것 또한 중요한 항목입니다.
function kstring_cut ($lbl, $length) {
preg_match('/([\x00-\x7e]|..)*/', substr($lbl,0,$length), $return); //먼저 자르고 한글 아닌 것은 두글자씩 나머지는 영문기준 한 글자씩 처리한다.
if ( $length < strlen($lbl) ) $return[0].="..."; //문자열이 길면 " ... " 을 붙인다.
return $return[0];
}
// 마퀴태크 <marquee> 사이에서 최근 공지 게시글을 뽑아오는 문제를 해결하는 과정에서 사용하였다.
한글과 같이 2바이트 문자열을 쓰는 경우 물음표(?)가 출력되어 버리는데, 맨 끝의 문자열이 2바이트중 절반인 1바이트만 가져오게 되어 발생하는 문제점이다. 2바이트가 되어야 문자조립이 되는데 반만 가져왔으니 글자 조립이 될 수 없기 때문이다.
따라서 2바이트 문자열을 사용하는 사이트에서 지정한 갯수만큼 문자열을 가져올 때는 위의 구문을 사용하면 된다.
영문자만 사용할 경우 단순하게 substr($문자열변수, 시작위치, 가져올글자수); 하면 된다. 그러나 이런 경우도 특수문자를 쓰는 경우라면 위 구문을 사용하거나 다른 형태의 사용자 함수를 만들어 써야 할 것이다.
35강. 사용자정의 함수 #1 (12분57초) //javascript: window.alert("하이"); // window.history(1); //뒤로 돌아가기 //디비 접속하기 전 넘어온 변수를 비교해서 자바스크립트로 알림창 보여주기 //아래구문을 이용해서 확인이 필요한 곳에 응용한다. if (!$name) { echo " <script> window.alert('이름입력해라.'); history.back(1); //뒤로 돌아가서 다시 입력창을 보여준다. </script> "; exit; // 요거를 꼭 해줘야 아래 행으로 확실하게 내려간다. }
//함수로 만들어서 쓰면 편리하다. function warning($msg) { echo " <script> window.alert('$msg'); history.back(1); </script> "; exit; } if (!$name) warning('이름엄따~'); if (!$email) warning('email넣어야지~'); if (!$memo) warning('메모안쓰나?');
36강. 사용자정의 함수 #2 (12분40초) <? //예제 일. 인자 없는 함수. 단독으로 일 처리함. function test() { echo "문자열을 출력합니다."; } test();
//예제 이. 인자 있는 함수. 이런 것을 많이 쓰지요 ~ //함수를 쓰면 프로그램이 아름다워집니다. ^^ function test_1($data) { echo "<li>"; echo $tmp; echo " 님 환영합니다."; } test_1("휴이"); test_1("또리"); //예제 삼. 전역변수와 지역변수; 요놈들이 매우 중요하다. 꼭 알아둬야 한다. $tmp = 100; //전역변수 function test_2($tmp) { echo $tmp; //test_2함수 안에서만 사용되는 지역변수. 변수명이 $tmp로 같지만 test_2함수 밖에서는 사용할 수 없다. } test_2($tmp); //이렇게 test_2의 인자를 바꿔도 결과는 동일하게 출력된다. function test_2($a) { echo $a; //$tmp를 $a로 치환해서 출력한다. global $tmp; //함수 외부에 있는 전역변수 $tmp를 이 함수 안에서 지역변수로 사용해라. } test_2($tmp); //예제 사. 환율구하는 함수 function ex_rate($a){ $kor = 1346.21; $total = $a * $kor; //함수는 결과값을 잘 보내줘야 한다. 매우 중요 !! return $total; //$total 값을 이 함수를 부른 곳으로 보내라. } $b = ex_rate(3); echo $b; //echo ex_rate(5), ex_rate(7); ... 이와 같이 사용할 수도 있다. 응용은 본인들 하기 나름 ~ ?>
37강. 페이지 나누기 - paging - (10분16초) //한 화면에 보일 페이지 수 %page = 5; if (!$start) $start=0; //시작페이지일 경우 처음부터 출력하게 만들거든요 ~ //디비접속 구문 삽입 후 $query = "select * from memo order by no desc limit $start, $page"; //이 구문을 잘 보도록 ! limit로 나누기 때문이다 ! $result = mysql_query($query, $connect); $query = "select count(*) as t from memo"; //전체 갯수를 가져옵니다. $result = mysql_query($query, $connect); $tmp = mysql_fetch_array($result); // $tmp[t]; //전체 갯수를 확인했습니다. $total = $tmp[t]; //페이지 나누는 부분 $page = $total / $page; //echo $page; //한번 확인해보세요 ~ ^^ for($i=0;$i<=$page;$i++){ $page_num = $page * $i; echo "<a href=$PHP_SELF?$start=$page_num>[$i]</a>"; //$PHP_SELF를 이용하여 현재 페이지로 링크한다. }
38강. 삭제할 때 비밀번호 물어보기 (11분58초) //memo 테이블에 비밀번호 필드를 하나 추가한다. //기존의 query에 pw를 하나 더 추가한다. 이 때 input태그에서는 type을 password로 지정한다. //<a href="delete.php">삭제</a> //delete_chk.php를 하나 만들어서 비밀번호를 입력하는 창 하나를 만든다. 그리고 delete.php로 변수를 넘긴다. //delete.php는 delete_chk.php에서 넘어온 변수를 확인해서 비번이 맞으면 삭제한다. $query = "select * from memo where no='$no'"; $result = mysql_query($query); $data = mysql_fetch_array($result); // echo $data[pw]; //비번이 넘어왔는지 확인해본다. if ($pw!=$data[pw]){ echo "비번을 다시 넣으세요."; exit; } //비번이 맞다면 아래 구문이 실행되고 자료를 삭제합니다. $query = "delete from memo where no'$no'"; $result = mysql_query($query, $connect);
39강. 회원가입과 로그인 (20분30초) - onsubmit="return chk_form()" 을 form에 삽입 // 39강은 그동안 배운 내용을 종합해서 스스로 회원가입 입력폼, 계정확인, 로그아웃에 필요한 각 단계별 얼개를 그리고 코딩하고 결과를 내는 종합연습을 하는 코너 입니다. // 메모장 만들기의 마무리 강의.
40강. 파일업로드 (12분3초) /* move_uploaded_file() form 태그를 일반태그와 다르게 써야 한다. */ //파일, 바이너리를 업로드 할 때는 POST로 지정하고 enctype=multipart/form-data로 반드시 지정해야 한다. <form action="40-2.php" method="post" enctype="multipart/form-data"> <li><input type=" </form> //파일업로드 하면 phpinfo.php Php variable에서 _FIELS[]로 확인할 수 있다. //echo $변수명_파일명; 해야 제대로 파일을 볼 수 있다. 이것을 지정한 경로로 보내줘야 한다. //move_uploaded_file()을 사용한다. php 4.0.3이상에서 사용가능. //move_uploaded_file($assa,"./data/".$assa_name);
//파일업로드 하는 부분 if (ereg($assa_name,".jpg")){ //확장자가 .jpg가 아니면 echo "그림파일만 업로드할 수 있어요."; } exit; move_uploaded_file($assa,"./data/".$assa_name);
41강. 추천사이트(북마크) 프로그램 만들기 (23분46초) //새로운 테이블 하나 만든다. //no(key, int, auto_inc), subject, memo(txt,100), img(varchar,100), hit, reg_date(datetime), url(varchar,100) //추가 폼을 만든다. - 제목, 설명(textarea), 주소(url), 스크린샷 //주소는 value="http://"를 기본값으로 넣어준다. //스크린샷은 type을 file로 준다. //enctype=muiltipart/form-data method=post //눈보라닷컴 //php실행부에서는 먼저 디비접속 후 아래 절차대로 실행 //if($assa_type!='imgae/gif'){ echo "gif파일만 업로드 됩니다."; exit; } move_uploaded_file($assa,"./data/".$assa_name); //insert into bookmark(subject, memo, url, img, regdate) values('$subject','$memo','$url','$assa_name', now()) //목록 보여주기 //디비접속후 아래 절차 실행 //select * from bookmark order by no desc while($data=mysql_fetch_array($result)){ //보여줄 테이블 만들고 //<?=$data[url]?> 과 같이 필요한 값을 보여주도록 한다. /*이미지는 <img src="data/<?=$data[img]?>"> <?=nl2br($data[memo]?>와 같이 한다. nl -> newline */ //<a href=<?=$data[url]?><?=$data[url]?></a> 클릭하면 url로 이동 }
//hit 증가시키는 부분은 mysql에서 update구문 사용시 hit=hit+1 적용
42강. 세션사용 (7분18초) - 세션은 서버상에 저장된다. 웹브라우저의 특징상 하나의 파일에서 사용된 변수가 다른 파일에 사용되지 않는데 이것을 처리하기 위해 응용. - 맨위에 session_start() 반드시 사용 - 세션등록은 session_register('변수명'); //$변수명 이렇게 쓰면 안된다. //서버상에 저장되고 클라이언트에는 정보가 남지 않는다. - 세션삭제는 session_destroy(); //로그아웃시 이런 방식으로 처리 //로그인에서 응용 $user_id, $pw; if ($user_id='assa' & $pw='1234') { $ismember=1; session_register('ismember'); //사용부분에서 seesion_start(); if($ismember=1) { echo "당신은 회원입니다."; }
44강. 즐겨찾기 제작하기 (18분26초)
- 카테고리 사용한 즐겨찾기(북마크) 만들기
- 카테고리 테이블을 만든다. no, code, name
- 테이블을 배열로 출력하는 기법을 적용 //10분 위치
- 쇼핑몰 구축을 포함하여 많은 부분에 응용할 수 있다. <-- 16강 참고 :여기를 누르세요 ~
★★★ 45강. 우편번호 검색기 제작 (26분39초)
//먼저 txt파일을 db로 부어넣는다.
- file(); //우편번호.txt 불러와서
- explode(',',$배열변수[]); // , 단위로 가져온다.
★★★ 49강. 달력 만들기 (14분52초) <? //date() 사용 //$year = date("Y"); if (!$year) $year = date("Y"); //$month = date("n"); if (!$year) $month = date("Y"); //이렇게 하면 url줄에서 calendar.php?month=2 하면 2월달 달력을 볼 수 있게된다. //$day = date("j"); if (!$year) $year = date("Y"); $start_week = date("w",strtotime("$year-$month-1")); //$yaer년 $month월 1일에 해당하는 요일을 구한다. //echo $start_week."<br>"; //4 출력된다. 0:일요일~6:토요일 // strtotime("2009-01-15"); -> 2009년 1월 15일의 타임스탬프 값을 반환 $today = strtotime("2009-01-15"); //echo $today."<br>"; //1231945200 과 같이 타임스탬프로 반환. //$max = date("t"); //주어진 월의 일수를 구한다. 결국 현재 달의 마지막 날짜를 구해주는 것이다. $max = date("t",strtotime("$year-$month-$day")); //이렇게 쓰면 더 정확하다. //echo "$year 년 $month 월 $day 일 "; //echo "<br>"; //echo " $year 년 $month 월은 $max 일 까지 있습니다. "; ?> <div align="center"> <?=$year?>년 <?=$month?>월 <table width="500" border="1"> <tr align="center" bgcolor="#ffee77"> <td>일</td> <td>월</td> <td>화</td> <td>수</td> <td>목</td> <td>금</td> <td>토</td> </tr> <tr> <? // 1일이 일요일이 아닌경우 앞쪽으로 공백을 표시 for($i=0;$i<$start_week;$i++){ ?> <td> </td> <? } ?> <? // 1일부터 해당 월의 마지막 날 까지 출력 for($i=1;$i<=$max;$i++){ $tmp = date("w",strtotime("$year-$month-".$i)); //토(6)요일 다음 값은 일(0) 이므로 $i=0이 되면 </tr><tr>을 넣어 줄을 끊어준다. //echo $tmp; if ($tmp==0) echo "</tr><tr>"; ?> <td align="center"><?=$i?></td> <? } ?> </tr> </table> </div>
* 쉬어가는 코너 ~ 49강 달력만들기를 연습해본 오늘은 2009년 1월15일 입니다. 요일은 위에 소스를 실행시키면 얻어지겠죠? ^^ 역시 백견이 불여일타 ~
달력만들기를 가지고 메모장과 함께 응용을 잘 해보면 정말로 멋진 조합을 만들어낼 수 있을 것입니다. 회원관리 기능과 함께 조합을 하면 아마 자신만의 사이트 빌더 초기 버전까지 만들어낼 수 있을 것입니다.
생각을 프로그램으로 구현해내는 것이 두꺼운 프로그래밍 전문서적의 주요내용을 다 외우는 것 보다 중요합니다. 아무쪼록 중단하지 말고 자기만의 사이트 초기버전을 만드는 것 까지 목표를 세우고 꼭 달성하시기 바랍니다. ^^
9강. FORM 태그를 이용한 값의 전 (8분19초) <form action="zero.php"> <li><input type="text" name="a" size="8" maxlength="8"> <li><input type="text" name="b" size="10" maxlength="10"> <li><input type="submit" value="전송"> </form>
10강. 그 외의 Form 관련 태그들 (12분35초) <input type=checkbox name=b value=헬기> <select name="변수명"> <option value="값1">값1 <option value="값1">값2 ... <option value="값n">값n 주의할점 php.ini파일에서 register_globals = off -> on 해야 변수전달된다. 보안문제로 register_globals = off 설정되었기 때문이다.
- 자세한 내용은 아래 내용을 참고. php.ini의 register_globals = Off [시큐리티, 퍼포먼스] - 입력 데이터(POST, GET, 쿠키, 환경 변수 그 외의 서버 변수)에 관해서 이미 글로벌 변수로서 등록하지 않게 한다. $foo 대신에 $_REQUEST["foo"]와 같이 사용할 필요가 있다. (request, namely, POST, GET, cookie 변수도 마찬가지) 특정의 $_GET["foo"], $_POST["foo"], $_COOKIE["foo"], $_FILES["foo"] 의 형식으로 지정해도 좋다. 이와 더불어서 import_request_variables()도 참조하면 도움이 된다. 참고: http://php.net/manual/en/security.registerglobals.php [출처] php.ini 설정하기 by 정연아빠
11강. 메일 발송하기 (11분 3초) - php의 mail()를 이용하여 보낸다. - php.ini 의 [mail function]부분 수정 필요 - 메일발송 안되면 대부분 이런 에러메세지가 뜬다. Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for 받는메일주소 ~~~
14강. 여러개의 파일을 거쳐서 값 전달하기 (7분 52초) - 설문조사에 응용할 수 있다. - php에서 변수는 현재의 파일에서 변수를 넘길 파일로 단 한번 전달할 수 있다. - 따라서 여러 페이지에 걸쳐 변수를 전달하려면 <input type=hidden name=변수명 value="<?=변수명?>">과 같이 숨겨진 input태그를 사용해서 이번 파일에서 다음파일로 변수를 전달한다. - 같은 방법을 반복하여 여러 페이지를 거쳐 변수를 전달할 수 있다.
15강. 여러개의 파일을 이용한 설문조사 (10분 31초) - hidden type으로 변수전달하는 방법을 응용한다. - radio 버튼 input태그의 value 값을 활용해서 if 조건문을 사용하여 결과를 보여주는 연습. - 10분 31초 여러개파일이용 설문조사몇가지 항목체크해서 점수에 따라 서로 다른 것을 보여준다.
16강. for 반복문 사용 (11분 44초) - 웹플밍에서 반복문은 게시판에서 많이 쓰인다. - 게시판리스트, 최근게시물 뽑아내기, 사진자료실에서 썸네일이미지를 사이트 앞쪽으로 뽑아내기, 쇼핑몰게시판 등에서 많이 활용된다. - 아래 구문이 구문이 기본 틀이 된다. for문과 if문을 함께 사용했는데 $i를 5로 나눈 나머지가 0, 즉 5의 배수가 되면 </tr><td>를 추가해서 가로 5칸 짜리 표가 주루룩 반복해서 그려진다.
18. 파일의 생성과 사용 12분43초 - 배운함수: fopen() //파일이나 URL을 연다. - 파일사용순서(절차) 1. 파일은 연다. fopen() 2. 파일을 사용한다. fputs() fgets() fread() ... - 쓰기: fputs(), fwrite() - 내용가져와 보여주기: fgets() 3. 파일을 닫는다. fclose()
<? $fo = fopen("a.php","w"); //기존파일없으면 새로 만든다. 읽을 때는 "r"로 바꿔준다. //fputs($fo, "Hello~ everyone !"); //기존내용 없애고 항상 새로 넣어버린다. $fget = fgets($fo,1000); //파일열어서 내용 가져온다. echo $fget; fclose($fo); //파일을 닫는다. ?>
- 3개의 파일을 만들었다. a.php : 메모 입력폼과 파일 내용보여주기 // fopen, fgets, explode, fclose 사용 b.php : c.php에 메모입력 // fopen, fputs, fclose 및 자바스크립트 location.href 사용 메모입력시 캐리지리턴(\r\n)을 반드시 넣어줘야 한다.
c.txt : 메모내용 '이름'과 '메모'가 담긴다.
* 쉬어가는 코너 ~ 서기님의 강의를 들으면서 매우 놀랐습니다. 한 개 강의당 10분을 전후하면서도 알찬 내용들 ~ 책만 파고 앉아서 이해(??) 하려고 생각했다면 최소 보름내지 한달은 걸릴만한 내용들을 마치 액션영화를 보는듯한 느낌으로 박진감 넘치게 진행해주셨기 때문이지요 ~
한 강의당 10분정도이기 때문에 시작이 반이라는 욕심으로 하룻밤 사이에 서기님의 강의를 모두 섭렵하려고 했는데 역시 마음만 빨랐을 뿐, 행동은 마음의 속도를 따라잡지 못하고 있는 것을 또 다시 나의 행동으로 목격하였다는거 아니겠어요? ^^
역시 플밍은 생각을 그려낼 때는 펜(샤프, 연필도 포함)과 종이를 쓰고 나머지는 키보드를 열심히 - 서기님 처럼 리드미컬한 속도로 - 두드리면서 코딩하고 결과보고, 벌레잡고 다시 보는 ~ 즉, 생각과 손가락의 속도가 일치하도록 열심히 열심히 움직여줘야 함을 강력하게 느끼고 있습니다.
여기 한 포스트에 서기님의 강좌 전체를 공부한 요약내용을 다 올리려 했는데 생각보다 많은 양이 채워지는 관계로 파일 다루는 것 까지만 정리하고 이후 강좌는 다음 포스트에 올릴 생각입니다.
조금만 더 참고 서기님의 강좌를 잘 들으시고 열쒸미 ~ 손을 놀리시기 바랍니다. 가장 빠르게 학습하고 내 것으로 만들기 위해서는 '한 강좌를 다 보고 머리로 이해해서 빠르게 구현해보면 되지~' 가 아니구요 ~
서기님의 리드미컬한 타이핑 속도와 조화를 이뤄서 함께 입력하고 결과를 함께 내어 보시기 바랍니다. 서기 선생님의 워낙 빠른 속도를 따라가지 못해서 저는 강의 중간에 한 번씩 일시정지해서 코딩을 하고 결과를 함께 확인하는 방법으로 계속 진도를 나아가고 있답니다.
강의 다 듣고 나면 서기님의 싱싱해 쇼핑몰에서 싱싱한 횟감을 구해서 달짝찌근한 쏘주랑 함께 드시기 바래요 ~ ㅋㄷㅋㄷ
20강. 메모장 만들기 #2 (12분 7초) - 19강에서 만든 a.php b.php c.txt를 계속 사용합니다. - while 문 사용으로 메모내용 반복출력 - time()과 date() 사용
- a.php 에 while 문 사용 <table border="1"> <tr align="center" bgcolor="#eeff88"> <td>이름</td> <td>메모</td> <td>작성일시</td> </tr> <? $fp = fopen("c.txt","r"); while ($tmp = fgets($fp,150)) { $take = explode(", ",$tmp); ?> <tr> <td><?=$take[0]?></td> <td><?=$take[1]?></td> <td><?=date("Y.m.d",$take[3])?></td> //제 컴에서 da </tr> <? } ?> </table> <? fclose($fp); ?>
21강. 메모장 만들기 #3 (14분21초) - 마지막에 쓴 글이 가장 위에 올라오도록 정렬하기
- while문에 $i++ 추가해서 글번호 반복출력
- $a = file("c.txt"); 형태로 메모장의 내용을 불러서 보여주는 방법
- 20강에 사용된 파일은 그대로 두고 e.php d.php를 따로 만들었습니다.
* 쉬어가는 코너 ~ 메모장 만들기를 조금만 응용하면 mysql이나 mssql같은 데이타베이스를 사용하지 않고도 '용어사전'이나 '단어장', '어학공부용 문장활용집' 등을 만들어 활용할 수 있습니다.
조금만 더 생각을 늘려보면 PDA에 쓸 수 있는 자신만의 학습용 메모장도 만들 수 있겠지요? ^^
22강. 메모장 만들기 #4 - 다른 사이트의 특정부위만 가져오기 (12분12초)
- 서버측에서 지원될 경우만 사용할 수 있습니다. 현재 제 컴터에서는 kr.yahoo.com/index.html 가져오기를 하면 CGI 에러가 뜹니다. 다른 사이트도 마찬가지네요 ~ 무엇이 문제인지 살펴봐야겠습니다.
- 주의: 집에서 연습으로만 활용하시고 공개목적의 사이트에는 사용하지 마세요. 저작권법에 저촉되는 사항입니다. 제휴 사이트에서 가져오는 것은 가능합니다.
- 오늘의 함수는 ereg()와 str_replace("찾을문자열","바꿀문자열","어디에서?")
//$b = "서버측에서 지원될 경우만 사용할 수 있습니다.";
//echo ereg("서버",$b); //정규화표현식. $b에서 '서버'문자열 있으면 참을 나타내는 1을 출력. 따라서 조건분기문에 사용할 수 있지요.
$take = 0;
for ($i=0;$i<$cnt;$i++){
if (ereg("찾을문자열",$a[$i])) $take=0;
$a[$i] = str_replace("<dd>"," ",$a[$i]); //<dd>를 찾아서 공백으로 바꿔라.
if ($take=1){
echo $a[$i];
}
if (ereg("찾을문자열",$a[$i])) $take=1;
}
?>
</td>
</tr>
</table>
* 쉬어가는 코너 ~ 23강의 듣고 연습하는데 오늘까지 딱 3일 걸렸습니다. 아무리 빨라도 소걸음 이라는 말이 있습니다. 피곤함을 이겨내면서 계속 현재 상태로 밀고 간다면, 학습시간으로 약 5~6시간을 더 투자하면 끝을 볼 수 있겠다는 생각이 드는군요. 하지만 오늘 공부한 시간을 보니 거의 5시간이 되는데, 시간당 4개 강의 진도를 나가는 것은 무리가 있을듯 합니다.
플밍은 백번보고 듣는것 보다 손가락을 움직여서 직접 코딩하고 결과를 내보고 다시 벌레를 잡는 과정을 되풀이 하면서 실력이 조금씩 향상되는 것 같습니다.
공부가 잘 안된다면 타이머를 돌린다던지 한번에 2개 강의 정도만 학습하고 30분을 쉬는 방법으로 해서 하루에 4개 강의를 듣는다는 식으로 학습계획을 잘 짜서 계속 밀고 나가시기 바랍니다. php공부를 하는 여러분들 끈기를 가지고 끝까지 가봅시다 ~ ^^
제로보드, 그누보드와 같은 배포판 게시판을 사용하다가 처음으로 PHP, mysql을 가지고 방명록과 게시판을 만들어보았다. 책에 소개된 대로 코드베낌 타이핑을 해서 작동테스트를 하니 웬걸? 결과가 나오지 않고 에러만 뜨는것 아닌가....
에러가 자꾸 나오니 자신감은 떨어지고 책을 쓴 저자가 안되는 코드를 소개했을리는 없고 그런데 왜 안되지? 어디가 문제가 있는걸까? 아무리 감자 대가리라고 하지만 이건 너무한거 아니야? 등등 나 자신을 질책하며 푸념한 시간이 꽤나 오래된 것 같다.
정보처리 산업기사 자격시험을 통과했으면서도 프로그래밍 실무에서는 사실 보여줄 만한 실력이 없었다. 그래서인지 더욱 나의 마음은 공허해졌지만 다시 일어서려는 오뚜기처럼 일어섰다 쓰러졌다를 반복해오던 중 문제해결 접근방법을 바꾸어보았다.
알고리즘, 아무리 강조해도 지나침이 없는 만큼 매우 중요한 내용이다. 루틴이라고 말하기도 한다. 게시판은 어떻게 작동을 하는가 라는 질문부터 필요한 사항을 조각내면서 루틴을 노트에 그려보았다. 그리고 또 생각을 했다. 어떻게 표현할까? 프로그램이라는게 결국 내가 머리속에 그리는 것을 컴터로 표현을 해내야 하는것이지 않는가?
그동안 시간을 들인 고통의 댓가일까? 한 시간도 채 안되는 시간을 집중해서 루틴을 만들고 php 언어로 표현을 해서 원하는 방명록과 게시판의 내용을 완성시킨 것이다.
얼마나 신이 나던지 ~ ^^
웹 프로그램은 방명록과 게시판, 회원관리 정도는 기본 루틴을 스스로 짜서 구현할 수 있어야 초급의 문턱을 넘어섰다고 한다.
한 과정을 넘어서니 무엇을 해야 할지 눈에 조금 보이기 시작한다. 늦게 시작한 만큼 더 열심히 해야 할 것이다. 언어공부에서 문형연습이 가장 중요한 것 처럼, 프로그램 역시 자신이 직접 프로그램을 많이 만들어봐야 한다. 남이 만든 소스코드 분석도 많이 해야 하지만 가장 중요한 것은 스스로 루틴을 만들어서 코딩하고 표현해보는 것이 더 중요하다고 강조하고 싶다.
역시 "기본이 중요하다."는 말을 명심해야 한다.
2008.11.11.火
1992년 육군항공학교에서 초등훈련 받았던 훈련기와 동일한 모델. OH-23GT
사진의 기종은 민간用 모델이다.
댓글을 달아 주세요
프로그래밍 이제 시작하고 있는 1人인데 좋은 글이네요 언제쯤 고수가 될수 있을지;;
ASP에 김태영님, Java에 남궁 성, 최영관님 그리고 빵집 개발자님같은 프로그래밍의 고수님들 이야기를 보면 프로그래밍에 혼과 철학이 담겨있음을 알 수 있었습니다. 특히 남궁 성 님께서는 책 10회독을 강조하셨구요.
처음에는 어렵게 또는 쉽게 시작하겠지만 가장 중요한 것은 "반드시 끝 매듭을 짓는 끈기와 열정"인 것 같아요.
매듭을 짓는 끈기와 열정이 있다면 회원님께서도 어느덧 고수 반열에 올라서 있을 것이라 확신합니다. 열심히 노력합시다. ^^ 자주 이야기 나누자구요 ~