티스토리 뷰

board.zip : 11장, register_globals=off, error_reporting = E_ALL 버전

책에 대한 질문은 꼭 http://ezphp.net/qna.html 에서 해주세요. 블로그는 가끔 방문하다보니 답변이 늦습니다.

오류 및 오탈자 부분을 수정한 버전을 올립니다.
만약 실행시 오류가 발생한다면 바로 알려주시면 최대한 빠른 답변을 드리겠습니다.
그리고 이 페이지는 항상 최신 버전의 소스코드를 유지할 예정입니다.
변경사항이 있으면 날짜와 함께 최신의 소스코드를 업로드하겠습니다.

참고로 문의하시는 분이 계셔서 말씀드립니다.
책의 예제 소스코드는 책을 구매하신 분 뿐만이 아니라 "모든" 분들이 "모든" 용도로 사용이 가능합니다.

2013년 8월 29일 업데이트

- 테스트 환경

-- Apache 2.4.6

-- PHP 5.5.3

-- MySQL 5.1.70

php.ini 파일 설정 : error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(~11장까지는 php.ini 파일에서 register_globals=on 상태임을 가정)

 

위의 환경에서 동작 확인하였습니다.

위의 error_reporting 설정은 기본값 설정이지만 경우에따라 Development 설정인 E_ALL 만 설정된 경우가 있습니다.
이때는 각종 Notice 및 Warning 메세지가 등장하게 됩니다.
이는 PHP의 버전이 올라감에 따라 그간 문제가 되어 왔던 보안 이슈를 해결하고 
PHP가 점점 엄격한 문법을 요구하고 있기 때문입니다.

MySQL의 경우에도 현재는 초기부터 사용되어온 mysql 함수들(mysql_connect 등)을 더이상 지원하지 않겠다는 의지를 보이고 있습니다. 현재는 사용이 가능하나 조만간 mysql API는 사라지고 mysqli API만 남게 될 것 같습니다.
이와같이 PHP는 다른 언어와 달리 빠르게 변모하기때문에 현시점에서 잘 동작하는 프로그램이
시간이 흘러감에 따라 부분적으로 더 이상 동작하지 않을 수 있습니다.

예제 소스를 Notice 및 Warning이 없도록 만들 수 있으나 그렇게 되면 책의 내용과 크게 상이해질 가능성이 있어서
그동안의 모든 문제점(편집 중에 생긴 오타와 문법 부분이 너무 간략하게 설명되어 있고 게시판의 호흡이 너무 긴 점 등)을 수정한 개정판을 준비하는 것이 더 빠를 수 있겠다는 생각이 듭니다.

혹시 책의 개선점에 대해 의견이 있으신분은 아래에 코멘트를 남겨주시면 최대한 반영하도록 하겠습니다.
감사합니다.

 


 

Comments
  • 프로필사진 BlogIcon 방용훈 저 프로잭트에 지금 이 소스를 쓰고있는데 실행이 안되네요 어느부분이 잘못된건지 좀 알려주시면 안될까요? 2010.06.21 05:32
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 11장 register_globals = Off 버전을 새롭게 추가하였습니다.
    그리고 11장의 조회수 업데이트 버그를 수정하였습니다.
    2011.11.15 14:04 신고
  • 프로필사진 비밀댓글입니다 2013.01.12 11:02
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 네 처음 한번만 생성하고 회원 가입을 할때마다 테이블에 레코드를 하나씩 추가해 주는 방법입니다. 2013.01.21 11:57 신고
  • 프로필사진 질문자 안녕하세요. 질문드릴 내용이 있습니다. chapter12에 보시면 list.php까지는 제대로 작동하는데
    read.php에 오탈자가 있는것 같습니다. 정상적으로 실행이 안되는데 어떻게 된거죠. 실험좀 해주시기 바랍니다.
    어느부분에서 오류가 난건지 모르겠어서요.
    2013.01.26 23:20
  • 프로필사진 이거슨 쿼리문에 오탈자 있을겁니다.
    mysql_quary( , $conn) 요부분... 쉼표앞에 뭐리가 들어가야해요.
    윗줄인가에 쿼리문이 변수로 되어있을거니까 그 변수명을 쉼표앞에 넣어주심 됩니다.
    참고로 소스 분석해보는 습관 안 들이시면 안됩니다...
    2013.03.25 11:27
  • 프로필사진 비밀댓글입니다 2013.03.25 11:23
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 필드 타입이 unsigned 라서 그렇습니다.
    unsigned의 경우는 부호가 없는 값으로 음수가 저장되지 않습니다.
    따라서 필드를 unsigned bigint 가 아닌 (signed) bigint 로 수정하시면 됩니다. 늦게 확인하여 답이 너무 늦었네요.
    2013.05.06 16:07 신고
  • 프로필사진 CUBE 질문이있습니다. 12장 게시판을 실습중인데, 역시나 read.php에서 작동이 되질않습니다. 아예 HTML태그도 안먹고 그냥 새하얀 백지만 뜹니다.
    쿼리보내는 오타 수정하였고(콤마 앞에 쿼리파라미터없는부분 넣었습니다.), 그리고 $no = $_GET[no];
    $id = $_GET[id]; 으로 변수에 인자 받아오게 하였습니다. Autoset으로 웹서버 만들었는데 php.ini가 \AutoSet6\Server\conf 에 있더군요. 안에서 register_global 값도 Off로 되어있는것에서 On으로 고쳤습니다. 구글링해서 온갖 뒤져봤지만, 저 세가지를 적어 고쳤음에도 불고하고 여전히 read.php 부분은 백지로 뜹니다. 쿼리는 데이터베이스에 잘 박히는거 확인했습니다. 글 확인하려고 글을 누르니 백지가 ㅜㅜ 설마해서 PHP범위가 HTML범위를 먹은것도 아닌지 체크를 해봤지만 그것도 아니고... 다른 오류 요인이 있는지 궁금합니다.
    2013.05.07 20:02
  • 프로필사진 CUBE 웹서버 바깥의 컴퓨터에서 read.php를 열면 http 500 에러가 뜨는군요... 2013.05.07 20:14
  • 프로필사진 CUBE 해결했습니다.. 로그보고 ㅜㅜ

    // 현재 글보다 thread 값이 작은 글 중 가장 큰 것의 id를 가져온다.
    $query = "SELECT id, name, title FROM $board WHERE
    thread < $row[thread] ORDER BY thread DESC LIMIT 1";
    $query=mysql_query($query, $conn);
    $down_id=mysql_fetch_array($query);


    쿼리를 파라미터로 못받는부분이 한군데가 아니었네요.

    [Tue May 07 20:17:56 2013] [error] [client 127.0.0.1] PHP Parse error: syntax error, unexpected ',', expecting ')' in C:\\AutoSet6\\public_html\\read.php on line 104, referer: http://localhost/list.php


    로그를 진작에 왜 안봤을까 ㅡㅡ;;
    2013.05.07 20:20
  • 프로필사진 하준곤 지금의 예제 PHP 5.5.0 이상 부터는 실행 안돼는데요.
    10장-15장 가지 PHP 5.5.0 이상에서 동작할 수 있게 새로 업데이트 해주 실 순 없나요?
    2013.08.22 15:06
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 당장은 힘들겠지만 검토하여 꼭 업데이트 하도록 하겠습니다. 2013.08.23 10:51 신고
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 테스트 완료하였습니다. 참고로 14장은 디버깅을 위해 일부러 에러가 생기게 만든 코드입니다. 2013.08.29 19:49 신고
  • 프로필사진 skyofwing 안녕하세요 여쭐게 있는데 13장 complete source 부분에서 list.php 소스에서 자꾸 글목록을 가져오는데 실패하였습니다.라는 메세지가 뜨네요..추가된 부분인 34줄 $result = mysql_query 부분에서 error가 터지는거 같은데 잘 모르겠습니다. 어디가 잘못된건지....현재 php 5.2 mysql 5버전을 쓰고 있고 threadboard.sql을 그대로 import 시켜 공부하기전에 작동시켜보았습니다. 그러나 12장 list. php 부분에서 에러없이 작동확인이 되는데 확인해 주시면 감사하겠습니다.

    2013.10.01 18:12
  • 프로필사진 skyofwing echo $query 문으로 바꾸었을 경우 입니다.
    SELECT * , (SELECT COUNT(*) FROM comment WHERE bid = board.id) as cnt FROM threadboard as board WHERE thread >= ( SELECT thread FROM threadboard ORDER bY thread LIMIT 0,1 ) ORDER BY thread LIMIT 10;
    2013.10.01 20:07
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 $result = mysql_query($query, $conn) or ErrorMessage('글 목록을 가져오는 도중 오류가 발생하였습니다.', false);

    이 부분을 다음과 같이 변경하세요.

    $result = mysql_query($query, $conn) or die(mysql_error());

    그러면 어떤 문제로 쿼리가 실패하는지 알 수 있을거예요.
    2013.10.16 13:12 신고
  • 프로필사진 ychani 맥에서 board.zip을 받아서 text editor에서 열었는데 한글이 전부 외계어로 뜨는데
    이 오류는 어떻게 해결해야 할까요..?
    약간 off topic이긴 하지만... 질문드립니다 ㅠㅠ
    2014.12.12 00:36
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 에디터의 문제 같네요. 위의 소스가 ASCII로 저장되어 있어서 그렇습니다. UTF-8로 수정하면 맥에서도 한글이 깨지지 않습니다. https://github.com/happybrown/php 에서 다운 받으시면 해결 될 것입니다. 2015.01.02 11:24 신고
  • 프로필사진 coya 아무리 해도 글수정완료를누르면 비밀번호가 틀렷다고 나오네요 ,,, 어떻게해야할까요 2015.06.10 01:59
  • 프로필사진 열공 SELECT * , (SELECT COUNT(*) FROM comment WHERE bid = board.id) as cnt FROM threadboard as board WHERE thread >= ( SELECT thread FROM threadboard ORDER bY thread LIMIT 0,1 ) ORDER BY thread LIMIT 10; Table 'td_board.comment' doesn't exist
    이렇게 13장 해보면 이렇게 뜨는데 어디부분이 잘못된건지 잘모르겠습니다.
    2015.07.01 21:24
  • 프로필사진 헤클 Table 'td_board.comment' doesn't exist
    이말은 td_board데이터 베이스에 comment 테이블이 존재 하지
    않는다는 말입니다.
    즉..
    comment 테이블 쿼리가 13장 폴더에 보시면 있는데 그걸
    실행하지 않아서..
    테이블이 존재 하지 않는다고 나온것 입니다.
    2015.07.16 17:58
  • 프로필사진 11 예제에서 폼전송시 pha1 암호화 방식 사용하는데 게시글 지울때의 pha1 암호화 해시값과 폼전송시 해쉬값이 틀려서 삭제가 안되는 증상이 있네요
    근데 왜 틀린걸까요?
    2015.07.29 17:01
  • 프로필사진 행인 소스코드 있는 그대로 호스팅 서버 php5.5 버전으로 옮겨놨는데

    한글도 깨지고, 글 수정하면 비번도 틀렸다고 나옵니다. 어케 하면되죠
    2015.07.29 20:58
  • 프로필사진 지나가던사람 list 부분에 no 부분 안나오는건 <?=$row['id'] ?></a> 빠진겁니다. 혹시나 모르시는분들 참고하세요
    공부하시는분들은 register off 로 두고 하는 코드방식이랑 on으로 하는 코드방식 각각 리퀘스트 객체 가져오는방법이 다르니 참고 바랍니다.
    2015.12.28 09:31
댓글쓰기 폼