2009/01/26 00:37
http://article.joins.com/article/article.asp?Total_ID=3436584

정말 멋있습니다 !

해병대 항공 발전과 활약상을 기대해봅니다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/18 21:00
윈도우 xp, 서버2003, 서버2008, 비스타 환경에서 iis와 함께 아파치(Apache)웹서버와 mysql, php를 함께 사용하는 방법입니다.

먼저 아래 프로그램을 다운로드 받으세요.
1. mysql 5.0   http://mysql.org
2. Apache 2.0 또는 2.2  http://httpd.apache.org
3. php 5.2.8  http://php.net
4. ZendOptimizer 3.3.3.  http://zend.net
5. phpMyAdmin 3.1.1  http://phpmyadmin.net

필자가 다운로드 받아 사용한 프로그램은 아래와 같습니다.
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 를 잘 다루는 것 또한 중요한 항목입니다.


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/14 16:04

* iis는 80포트를 사용
* Apache(아파치)는 81포트를 사용하였다.

http.conf 열어서
Listen 80 -> Listen 81로 바꿔주고
디렉토리를 잡아주는 것으로 하였기 때문에 앨리어스를 맨 아래에 추가하였다.

Alias /zeroxe "d:/www/apacheweb/zeroXE/"
<Directory "d:/www/apacheweb/zeroXE">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Document Root는 알아서 설정하였을 것으로 보구 설명 생략 ~


위와 같이 설정 후 재부팅(미심쩍으면) ... 암튼  iis와 아파치 웹서버를 재실행 !

iis 쪽은 브라우저 주소창에 localhost하면 알아서 http://  붙는데
아파치 웹서버에서 아이피:포트/경로 이렇게 하면 브라우저에서 어쩌고 저쩌고를 보여준다.

http://  요거 붙여서리 http://127.0.0.1:81/경로/index.php 이렇게 하면 잘 뜬다.  쩝.... 구찬케스리 ~

암튼  요러케 해서리 iis + apache 잘 돌아간다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/14 16:01

$label = kstring_cut ($문자열변수,가져올 문자열 길이)
echo $label;
    
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($문자열변수, 시작위치, 가져올글자수); 하면 된다. 그러나 이런 경우도 특수문자를 쓰는 경우라면 위 구문을 사용하거나 다른 형태의 사용자 함수를 만들어 써야 할 것이다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/13 11:21

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 "당신은 회원입니다.";
    }
   


43강. 공용함수 만들어 사용과 쿠키 로그인 (22분15초)
- 후반부에 암호와 쿠키 사용하는 부분은 일반적으로 많이 사용하는 루틴이므로 꼭 익혀둬야 한다.

44강. 즐겨찾기 제작하기 (18분26초)
  - 카테고리 사용한 즐겨찾기(북마크) 만들기
  - 카테고리 테이블을 만든다. no, code, name
  - 테이블을 배열로 출력하는 기법을 적용 //10분 위치
  - 쇼핑몰 구축을 포함하여 많은 부분에 응용할 수 있다. <-- 16강 참고 :  여기를 누르세요 ~


★★★ 45강. 우편번호 검색기 제작 (26분39초)
  //먼저 txt파일을 db로 부어넣는다.
  - file(); //우편번호.txt 불러와서
  - explode(',',$배열변수[]); // , 단위로 가져온다.


★★★ 48강. 엑셀파일 내용을 mysql 디비에 담아서 조회(select태그)하는 기능 구현 (17분27초)
  - 연습용 엑셀파일 하나를 준비해서 따라해보세요.


★★★ 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?>년&nbsp;&nbsp;<?=$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>&nbsp;</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일 입니다. 요일은 위에 소스를 실행시키면 얻어지겠죠? ^^   역시 백견이 불여일타 ~ 

달력만들기를 가지고 메모장과 함께 응용을 잘 해보면 정말로 멋진 조합을 만들어낼 수 있을 것입니다. 회원관리 기능과 함께 조합을 하면 아마 자신만의 사이트 빌더 초기 버전까지 만들어낼 수 있을 것입니다.

생각을 프로그램으로 구현해내는 것이 두꺼운 프로그래밍 전문서적의 주요내용을 다 외우는 것 보다 중요합니다.  아무쪼록 중단하지 말고 자기만의 사이트 초기버전을 만드는 것 까지 목표를 세우고 꼭 달성하시기 바랍니다. ^^


★★★ 50강. 자바스크립트로 풀다운(pulldown)메뉴 만들기 (6분24초)
<style>
  td {font-size:8pt; font-family:tahoma;}
</style>

<script>
  function toggle(title){
   if(title.style.display != "none") {
     title.style.display = "none";   <!--<td> ~ </td> 내용이 보이지 않음-->
    } else {
     title.style.display = "";<!-- 내용이 보임 -->
    }
   }
</script>
  
  <table width="150" border="0">
    <tr align="cetner" bgcolor="#99cc00">
      <td>풀다운메뉴연습</td>
    </tr>
    <tr>
      <td><a href=# onclick="toggle(menu1)">☞ 메뉴 1</a></td>
    </tr>
    <tr id="menu1" style="display:none">
      <td>*서브 1-1<br>
        *서브 1-2<br>
        * 서브 1-3<br>
        * 서브 1-4<br>
        * 서브 1-5</td>
    </tr>
    <tr>
      <td><a href=# onmouseover="toggle(menu2)">☞ 메뉴 2</a></td>
    </tr>
    <tr id="menu2" style="display:none">
      <td>* 서브 2-1<br>
        * 서브 2-2<br>
        * 서브 2-3<br>
      </td>
    </tr>
  </table>

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/12 11:32
윈도우 IIS에서는 '가상디렉터리'라는 서비스로 한 개의 웹서버에서 여러개의 사이트를 돌릴 수 있는데 아파치(Apache)웹서버에서는 가상호스트(Vitrual Host)를 http.conf에 추가함으로써 같은 능력을 발휘할 수 있다.

http.conf를 열어서 아래와 같이 추가한다.

<VirtualHost 127.0.0.1:8080>     //Listen 8080 이므로
  ServerAdmin huey@localhost  //대충 이렇게 써주면 된다.
  DocumentRoot /phpMyAdmin  //이 부분이 http://127.0.0.1:8080/phpmyadmin 으로 이름이 지정되는 부분으로 매우 중요하다.  이미 http.conf 문서 상단에 잡혀있는 Document Root 경로를 "/"로 하여 하위 경로를 이와같이 적어주면 된다.  윈도우 iis에서는 '찾아보기'를 눌러서 c드라이브나 d드라이브 등 기타 경로를 지정해줄 수 있다.
  ServerName localhost  //대충 이렇게 넣는다.
</VirtualHost>

필자는 이런 방식으로 php로 작성된 사이트나 문서는 윈도우 아파치 환경에서 돌리고 있습니다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/11 18:17

24강. 쿠키 사용 (9분40초)
  - setcookie("쿠키변수", "값", time()+기간);
  - 웹에서는 서로 다른 문서간에 값을 공유할 수 없다. 그래서 쿠키와 세션이 나왔다.
  - 두개 이상의 파일에서만 값을 공유한다.
  - 쿠키는 헤더에 전송된다.
  - 기본적으로 브라우저가 닫힐때까지만 값이 유효
  - 동일한 도메인에서 작동된다. 다른 도메인에서도 사용하게 하려면 옵션을 처리해야한다.

  - a.php
<?
  setcookie("cook","inkeeper"); //브라우저가 닫힐 때 까지 유효. 여기서는 메모리에 저장된다.
  setcookie("timeout","have good bar",time()+30); //30초만 유효. 이 경우는 파일로 저장해서 유효기간을 체크한다.
  echo $cook;
?>

  - b.php
<?
  echo $cook;
  echo $timeout;
?>

25강. 회원가입, 로그인 구현 (16분24초)

  - 회원가입을 받아 mbr.dat 파일에 계정을 저장하고, 쿠키인증으로 사용자 식별 연습.
  - 주의: 상용공개 사이트 구축시 이 방법은 피해야 합니다. 해킹당하기 가장 쉬운방법이지요 ~ 오직 연습을 위한 것입니다.

  - 가입폼에서 전달된 값을 mbr.dat 파일에 넣는 코드
<?
  $fp = fopen("mbr.dat","a+");
  $t = time();
  $tmp = "$id, $pw, $name, $REMOTE_ADDR, $t\r\n";
  fputs($fp,$tmp);
  fclose($fp); 
?>

  - 사용자 계정 체크 코드
<?
  $fp = fopen("mbr.dat","r");
  while($tmp = fgets($fp,200)){
   $a = explode(", ",$tmp);
   if ($a[0]==$id & $a[1]==$pw) {
    setcookie("member","ok");
   }
  }
  fclose($fp);
?>

<?
  if($member=="ok") {
   echo "잘 들어오셨습니다.";
  } else { echo "누구여?"; }
?>

26강. 쿠키의 시간제한 (5분37초)
<?
  setcookie("timechk",time(),time()+10);
  $tmp = time()-$timechk;
  if ($timechk) {
   echo "$tmp 초 이전에 방문했지요?";
  } else {
    echo "처음이네요.<br>";
   }
  echo $timechk;
?>

27강. 기본적인 환경변수들 (7분18초)
<?
  echo $PHP_SELF."<br>"; //환경변수
  phpinfo(); //php variables에서 환경변수 정보확인
  echo $_SERVER["HTTP_USER_AGENT"]; //아래 $HTTP_USER_AGENT라 쓰는것 보다 이처럼 전체를 다 써주는 것이 좋다.
  echo "<br>";
  echo $HTTP_USER_AGENT;
  echo "<br>"; 
  echo $_SERVER["REMOTE_ADDR"]; //ip 확인
  echo "<br>";
  echo $HTTP_REFERER; //자주사용. 바로 전의 주소값을 기억한다.
  //즉, 어느 사이트를 통해서 현재 사이트로 들어왔는지 알 수 있다.
  //동영상의 경우 마구 퍼가는 것을 방지하기 위해서 이것을 많이 사용한다.
  //또한 사이트 분석에도 많이 사용한다.
?>

28강. SQL이란, phpMyAdmin 설치방법 (16분20초)
  - phpMyAdmin 다운받아 설치
  - config.defaulut.php 수정 (모든 사용자가 동일한 것은 아니다.)
    $cfg['Servers'][$i]['auth_type']='cookie';
    $cfg['blowfish_secret']='바꾸고자하는값';
  // mysql과 phpmyadmin을 설채해서 사용해본 경험이 있다면 이 과정은 건너뛰어도 됩니다.

29강. 테이블만들기 (6분56초)
  - phpMyAdmin 사용
  - 메모장용 memo_db, memo_tb 생성
  - no(int, autoincr), name(varchar(20)), email(varchar(50)), memo(varchar(200)), w_date(datetime), ip(varchar(15))
  - 경험있는 사람은 memo테이블을 하나 만들고 이 강의를 건너뛰어도 됩니다.

30강. 테이블에 값 추가 (15분35초)
  - 파일 다루는 것과 같이 DB
접속 > insert > DB close 순서로 데이타베이스를 사용한다.
  - 자주사용하는 mysql 사용 함수는 아래와 같다. 표준 구문만 알면 mysql, ms-sql, oracle DB까지 모두 사용할 수 있다.
    
mysql_connect()  //mysql -u root -p -h localhost와 같은 역할
    mysql_select_db()  //use 디비名; 과 같은 역할
    mysql_query()  //()안에 insert into ~나 select * from~ 같은 구문을 넣어서 실행
    mysql_close()  //mysql>quit 명령 넣고 나오는 역할

  - 필자가 사용하는 컴터상태가 좋지 않아서 현재 mysql 처리하는 구문이 제대로 안먹고 있네요 ~  각자 간단한 메모테이블과 필드를 만들어서 mySql 디비에 집어넣어보세요 ~


31강. DB에서 값을 가져와서 출력 (13분14초)
  -  배운 함수
substr("문자열",가져올 첫부분,끝부분)
  -  입력 폼(Form)을 만들어 자료를 넣을 때 항상 sql 구문을 잘못써서 벌레를 잡아야 하는 경우가 많이 생긴다.  아래처럼 처리했다.

  $input = "INSERT INTO memo (name,email,memo,w_data,ip) VALUES('$name','$email','$memo',now(),'$REMOTE_ADDR')";
  if (mysql_query($input)) {
   echo "잘 입력되었습니다.";
  } else {
   echo "뭔가 좀 이상하군요 ~";
  }

  - 디비에서 가져온 내용을 반복해서 뿌려주는 부분이다. 나는 주로 for 문을 자주 사용했는데 while문은 이렇게 간단하고 깔끔하게 처리해주는 능력이 있다. while 문과 자주 친해지면 도움되는 일이 많이 있습니다. ^^  이 부분은 반복출력시 많이 사용되는 부분입니다.  손가락 끝에서 주르륵 ~ 나올 수 있도록 숙달시켜 놓으세요.

<?
  while($data = mysql_fetch_array($take)){
?>
  <tr>
    <td><?=$data[no]?></td>
    <td><a href=mailto:<?=$data[email]?>><?=$data[name]?></a></td>
    <td><?=$data[email]?></td>
    <td><?=$data[memo]?></td>
    <td><?=substr($data[w_data],0,16)?></td>
    <td><?=$data[ip]?></td>
  </tr>
<? } ?>

32강. 자료 정렬순서 바꾸기 (9분23초)
  - include "a.php"; //파일삽입
  - 정렬은 order by 필드명 asc 또는 desc
  - 갯수제한 limit //mysql에서만 제공되는 기능
    select * from memo order by no desc limit 5
    limit 2,5 //2개를 띠고 5개만 출력

33강. 자료삭제 (8분31초)
//delete from memo where 필드='값';
// if (!$result) die(mysql());
/*<a href="del.php?no=<?=$data[no]?>" onclick="return confirm('정말로 지울거여?');">삭제</a>
  이 때 delete from memo where no='$no' */

34강. 자료수정 (10분7초)
// update 테이블 set 필드='값', .... where 조건 ;
  // update memo set name='휴이';  //이렇게 하면 name필드 전체가 다 수정되버린다. 지극히 조심해야 할 부분 !!!
  // update memo set
            name='$name',
            email='$email' // 필드 끝 부분은 컴마(,)를 뺀다. 주의 !!
            where no='$no';


// 쉬어가는 코너 ~
백문이 불여일타 !!  아무리 강조해도 지나침이 없는 이야기 !
한번에 다 집어먹으려는 마음은 금물 ~  항상 마음은 저 멀리 앞서가지만 행동은 소걸음이다. - 휴이의 어록에 있는 말씀 입니다. ^^ -  매 강좌별로 나오는 주요 구문들 나올 때 '일시정지' 누르고 직접 타이핑 하면서 결과를 함께 내어 보면서 공부하세요 ~

35강 부터는 #3 포스트에서 이어집니다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

  1. Favicon of http://huey4u.net BlogIcon 휴이(huey) 2009/01/13 12:24  댓글주소  수정/삭제  댓글쓰기

    웹플 기초학습에 도움되는 사이트 하나를 소개 합니다.
    http://lec.zetblog.net

2009/01/09 18:52

제로보드.com에 올려진 "서기"님의 PHP 동영상 강좌 입니다.
체화(體化)된 php 고수 "서기"님의 강의를 듣고 있으면 마치 나 자신도 고수가 된 듯한 느낌에 빨려듭니다. ( 더 정확하게는 이 정도 실력은 되어야지 하는 꿈을 꾸는 .... ㅋㄷㅋㄷ )

php 프로그래밍에 관심있다면 조금씩 시간을 투자해서 꾸준하게 이 강좌를 들으시기를 추천합니다. 아래 강의 제목을 누르면 각 강좌 페이지가 새 창으로 나타납니다.

강의 전체 리스트 보기(<--여기를 누르세요)

1강.   HTML이란 무엇인가 (15분)
  - http://acrosoft.pe.kr --> AcroEdit 사용 추천
  - html 문서에 대해 전혀 기초가 없다면 꼭 보고 넘어가야 합니다.
  - 또한 태그 사용에 대한 기초학습이 필요한 경우 "태그매니아(http://tagmania.net)" 방문을 추천합니다.

2강.  하이퍼링크, 테이블태그 사용법 (11분)

3강.  테이블 태그 심화학습 (11분) 
  - 로스팬(RowSpan)과 컬스팬(ColSpan)
  - 홈페이지 게시용 테이블 나누기

4강.  스타일시트 (6분 16초)
  - 스타일시트 사용으로 문서의 일관성을 적용한다.
  <style>
    .singsing{font-size:15pt; font-type:tahoma; color:blue}
    td, li {font-size:9pt}
 </style>

5강.  웹서버, 웹브라우저, PHP (13분 6초)

6강.  Hello PHP (12분 23초)
  - include로 다른 파일을 현재 문서로 가져온다.
  - 예) include "a.html" ;
  - 출력문:  include "문자열" ; 또는 print "문자열" ;
  - 출력함수:  printf("문자열") ;
  - 변수: $변수명 = 넣을 값 ;

7강.  GET 방식 이용한 변수 전달 (9분 28초)
  -  <? echo $변수 ?> -> <?=$변수?>
  - http://경로/파일명 ? 변수1=값1 & 변수2=값2 & ... & 변수n=값n

8강.  GET 방식 변수전달과 테이블, 스타일 태그 사 (10분44초)

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 받는메일주소 ~~~

12강.  IF 문 사용 1 (9분30초)
  - if (조건) { 구문; }
  - 다중 if 문

13강.  IF 문 사용 (2) - 수, 우, 미, 양, 가 출력하기 (9분 36초)
  - if (조건1 & 조건2) { 구문 }

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칸 짜리 표가 주루룩 반복해서 그려진다.

<table border="1">
  <tr>
    <? for ($i=1;$i<=100;$i++) { ?>
    <td>cc
    </td>
   
    <? if ($i%5==0) {
          echo "</tr><tr>";
       } ?>
    <? } ?>
</table>

17강. 배열변수 사용 (11분10초)
  - 함수 count()와 explode() 용법을 함께 공부한다. 아래 예제를 참고하여 각자 연습.
<?
 $a = "헬기, 정찰기, 전자전기, 장갑차, 전차";
 $b = explode(", ", $a); //", "를 기준으로 분리해서 $b에 배열변수로 넣는다.
 $c = count($b); //배열변수 $b 갯수
?>

<table border="1" width="50%" align="center">
 <? for ($i=0; $i<$c; $i++) { ?>
 <tr>
  <td align="center"><?=$b[$i]?>
  </td>
 <? } ?>
</table>

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); //파일을 닫는다.
?>

19장. fopen, fputs, fgets, fclose 를 이용한 메모장 만들기 #1 (16분 50초)
  - fopen 에서 꼭 알아야 할 내용
    r 읽기모드
    w 쓰기모드, 파일없으면 만들어서 쓴다, 두번째 입력시 기존입력된 것은 지워진다.
    a 쓰기모드로 연다, 파일이 있어야 한다, 계속 입력모드
    a+ 쓰기모드, 계속입력, 파일없으면 만들어서 쓴다

  - 3개의 파일을 만들었다.
    a.php :  메모 입력폼과 파일 내용보여주기 // fopen, fgets, explode, fclose 사용
    b.php :  c.php에 메모입력 // fopen, fputs, fclose 및 자바스크립트 location.href 사용
               메모입력시 캐리지리턴(\r\n)을 반드시 넣어줘야 한다.
    c.txt  :  메모내용 '이름'과 '메모'가 담긴다.

  - a.php 내용
    <form action="b.php" method="post">
<table border="1">
 <tr bgcolor="#eeff88">
  <td colspan="2" align="center">휴이의 메모장</td>
 </tr>
 <tr>
  <td>이름</td>
  <td><input type="text" name="name" size="10"></td>
 </tr>
 <tr>
  <td>메모</td>
  <td colspan="2">
   <input type="text" name="memo" size="30">
  </td>
 </tr>
 <tr>
  <td colspan="2" align="center">
   <input type="submit" value="전송">
  </td>
 </tr>
</table>
</form>
<br>

<table border="1">
 <tr>
  <td>이름</td>
  <td>메모</td>
 </tr>
 <tr>
 <?
  $fp = fopen("c.txt","r");
  $tmp = fgets($fp,150);
  $take = explode(", ",$tmp);
 ?>
  <td><?=$take[0]?></td>
  <td><?=$take[1]?></td>
 </tr>
</table>
 <? fclose($fp); ?>

- b.php
<?
 $fp = fopen("c.txt","a+");
 $tmp = "$name, $memo\r\n";
 
 fputs($fp, $tmp);
 fclose($fp);
?>

<script>
 location.href="a.php";
</script>

* 쉬어가는 코너 ~
서기님의 강의를 들으면서 매우 놀랐습니다.  한 개 강의당 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); ?>

  - b.php 에  메모작성 시간을 추가했습니다.
<?
 $fp = fopen("c.txt","a+");
 $now = time();  //현재 시간을 Unix 타임스탬프로 구합니다.
 $tmp = "$name, $memo, $now\r\n";  // \r\n은 캐리지 리턴
 
 fputs($fp, $tmp);
 fclose($fp);
?>

21강. 메모장 만들기 #3 (14분21초)
  - 마지막에 쓴 글이 가장 위에 올라오도록 정렬하기
  -
while문에 $i++ 추가해서 글번호 반복출력
  -
$a = file("c.txt"); 형태로 메모장의 내용을 불러서 보여주는 방법
  - 20강에 사용된 파일은 그대로 두고 e.php  d.php를 따로 만들었습니다.

  - e.php
<style>
  td {font-size=9pt}
</style>
<table border="1" width="85%" align="cetner">
 <tr align="center" bgcolor="#00ff55">
   <td width="15%">번호</td>
   <td width="20%">이름</td>
   <td width="50%">메모</td>
   <td width="15%">작성시간</td>
 </tr>
  
  <?
    $fp = fopen("c.txt","r");
    $i = 1;
    while ($tmp = fgets($fp,200)) {
     $a[$i] = $tmp; //$tmp를 배열변수로 받는다.
     $i++;
    }
   $i--; //$i=$i-1
    for($x=$i; $x>=0; $x--){ //글번호 큰것부터 작은 순으로 반복
     $take = explode(", ",$a[$x]);
 ?>
     <tr>
       <td align="center"><?=$x?></td>
       <td align="center"><?=$take[0]?></td>
       <td><?=$take[1]?></td>
       <td align="center"><?=date("Y.m.d_H:i:s",$take[2])?></td>
     </tr>
  <? }
     fclose($fp);
 ?>
</table>

- d.php
<table width="500" border="1">
<tr>
  <td>번호</td>
  <td>이름</td>
  <td>메모</td>
  <td>시간</td>
<?
  $a = file("c.txt"); //c.txt내용을 줄 단위로 $a에 배열로 저장.
  $cnt = count($a); //$a 갯수
  for($i=0;$i<$cnt;$i++){
   $take = explode(", ",$a[$i]);
?>
<tr>
  <td><?=$i?></td>
  <td><?=$take[0]?></td>
  <td><?=$take[1]?></td>
  <td><?=date("Y.m.d_H:i:s",$take[2])?></td>
</tr>
<?
 }
?>
</tr>
</table>

* 쉬어가는 코너 ~
메모장 만들기를 조금만 응용하면 mysql이나 mssql같은 데이타베이스를 사용하지 않고도 '용어사전'이나 '단어장', '어학공부용 문장활용집' 등을 만들어 활용할 수 있습니다.

조금만 더 생각을 늘려보면 PDA에 쓸 수 있는 자신만의 학습용 메모장도 만들 수 있겠지요? ^^

22강. 메모장 만들기 #4 - 다른 사이트의 특정부위만 가져오기 (12분12초)
  - 
서버측에서 지원될 경우만 사용할 수 있습니다. 현재 제 컴터에서는 kr.yahoo.com/index.html 가져오기를 하면 CGI 에러가 뜹니다.  다른 사이트도 마찬가지네요 ~ 무엇이 문제인지 살펴봐야겠습니다.
  - 
주의: 집에서 연습으로만 활용하시고 공개목적의 사이트에는 사용하지 마세요. 저작권법에 저촉되는 사항입니다.   제휴 사이트에서 가져오는 것은 가능합니다.
  - 오늘의 함수는 ereg()와
str_replace("찾을문자열","바꿀문자열","어디에서?")

<table border="1" align="center">
<tr>
  <td>최근소식들</td>
</tr>
<tr>
  <td>
<?
  $a = file(http://주소를 입력);
  $cnt = count($a);
 
  //$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강. 메모장 #5 - 파일 입출력문으로 카운트 만들기 (14분35초)
  -
substr(변수,n,m) //n번째 문자열 다음 글자부터 m개 출력
  - strlen(변수) //문자열의 길이출력

<?
  $fp = fopen("cnt.dat","r");
  $cnt = fgets($fp,100);
  $cnt = $cnt + 1;
  fclose($fp);
?>

회원님은
<?
  $a = count($cnt);
  for($i=0; $i<$a; $i++){ ?>
     <img src="./img/<?=substr($cnt,$i,1)?>.gif">
<?
 }
?>
번째 방문하셨습니다.

<?=$cnt?>번째 방문자입니다.
<?
  $fp = fopen("cnt.dat","w");
  fputs($fp,$cnt);
  fclose($fp);
?>


* 쉬어가는 코너 ~
23강의 듣고 연습하는데 오늘까지 딱 3일 걸렸습니다.
아무리 빨라도 소걸음 이라는 말이 있습니다.  피곤함을 이겨내면서 계속 현재 상태로 밀고 간다면, 학습시간으로 약 5~6시간을 더 투자하면 끝을 볼 수 있겠다는 생각이 드는군요.  하지만 오늘 공부한 시간을 보니 거의 5시간이 되는데, 시간당 4개 강의 진도를 나가는 것은 무리가 있을듯 합니다.

플밍은 백번보고 듣는것 보다 손가락을 움직여서 직접 코딩하고 결과를 내보고 다시 벌레를 잡는 과정을 되풀이 하면서 실력이 조금씩 향상되는 것 같습니다.

공부가 잘 안된다면 타이머를 돌린다던지 한번에 2개 강의 정도만 학습하고 30분을 쉬는 방법으로 해서 하루에 4개 강의를 듣는다는 식으로 학습계획을 잘 짜서 계속 밀고 나가시기 바랍니다.  php공부를 하는 여러분들 끈기를 가지고 끝까지 가봅시다 ~ ^^

24강부터는 #2번 포스트에 올립니다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

  1. Favicon of http://scjnet.tistory.com BlogIcon 사이버수사관 2009/01/09 21:10  댓글주소  수정/삭제  댓글쓰기

    체화라.. 어디서 많이 들은 단어인데...

  2. Favicon of http://scjnet.tistory.com BlogIcon 사이버수사관 2009/01/09 21:12  댓글주소  수정/삭제  댓글쓰기

    이런.. 실시간 리플을...

2009/01/09 13:41
티스토리를 사용하고 싶은 회원님들은 초대장 신청을 하세요.
신청 우선순위대로 나눠드리겠습니다.

** 방명록에 신청의 글 남겨주세요.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/06 10:03
인터넷이 생활문화의 중심에 들어서면서 필자에게 두 가지 변화를 가져다 주었습니다.
하나는 아무생각없이 시간 죽이는데 큰 역할을 한 것이고
또 하나는 공부를 하도록 만드는 압박(??)이지요.

공부를 하도록 만드는 압박 중 하나는 "기록"에 대한 압박이었습니다.

또한 기록에 대한 필자의 생각은 이렇습니다.

" 기록은 역사다.
  역사는 미래를 만들어가는 기초다.
  때문에 나의 미래를 환하게 열기 위해서는 반드시 기록(==역사)을 남겨야 하는 것이다.
"

인터넷 문화가 확장되고 생활환경이 나아지면서 내 생각을 옮겨놓을 수단은 정말 넘쳐납니다.
인터넷에 쓸까?  노트에 쓸까? 를 고민하다가 떠오른 생각들을 한 개피 담배연기와 함께 날려버리는 경험도 많이 했을겁니다.

본격적으로 노트를 쓰기시작한지는 6년이 된 것 같군요.
아직 생활기록은 틀이 잡히지 않았지만,
진리를 깨우치는 道訓노트는 책장 두 칸을 가득 채우고 세 번째 칸을 잠식해가고 있습니다.

기록하다보면 나누고 싶은 좋은 생각, 좋은 이야기가 나오는데
이런 내용들은 인터넷에 올려 여러사람과 함께 공유하는게 좋다는 생각을 많이 해봅니다. 서로 의미있는 댓글과 인사로 공감을 나누다 보면 삭막한 이 세상을 따뜻하게 살아가는 방법이 될 것이라 생각합니다.

미래는 만들어가는 것입니다. 미래를 환하게 여는 오늘을 만들기 위해서는 지금 당장 각자의 수첩과 노트를 펴고 한 단어, 한 줄, 한 페이지 이렇게 손을 움직여 쓰기를 권합니다.

노트, 메모 쓰기를 생활화 하고 그 중에 좋은 이야기들은 인터넷에 올려서 감동을 나눠보면 어떨까요?
공감을 하면 지혜가 커질것이라 확신해봅니다. ^^

2009.01.06  火  휴이(huey)
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요

2009/01/01 13:20


소門 열렸어요.
七星布門도 열렸어요.
布福浙道하세요 !

- 김도형 -

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 휴이(huey)

댓글을 달아 주세요