[건의] 그누보드에 php 관련 경고(notice, warning)가 너무 많군요.. 정보
[건의] 그누보드에 php 관련 경고(notice, warning)가 너무 많군요..본문
지금 그누보드용 플러그인을 제작중이라..
이것저것 뜯어보고 있는데요..
저는 제 소스를 디버깅하려고.. PHP관련 에러 옵션을 E_ALL 로 켰더니..
세상에.. 그누보드 자체에서의 notice 와 warning 이 너무 많았습니다.
(이것은.. 방문자가 많을 때에는 그누보드의 성능을 심각하게 떨어뜨리는 원인이 됩니다..)
음.. 가장 자주 있는 것은 undefined constant 이고요..
그다음은 Undefined offset, 그다음은 Undefined variable 였습니다.
우선.. undefined constant 를 고치시려면..
$g4[member_table] 이렇게 쓰여있는 것을 모두 $g4['member_table'] 이런 식으로 바꿔줘야 합니다.
undefined offset 은.. 저도 잘 모르겠군요..
undefined variable 은.. 주로 컴색쿼리 생성할 때 쓰이는 변수에서 많이 검출되는데요.. (str, sca 등)
이것들은 스크립트나 변수 넘겨받을 때 초기화만 잘 해주면 됩니다..
아무튼.. 조금이라도 좋아지는 그누보드가 되길 바랄께요.. ^^
이것저것 뜯어보고 있는데요..
저는 제 소스를 디버깅하려고.. PHP관련 에러 옵션을 E_ALL 로 켰더니..
세상에.. 그누보드 자체에서의 notice 와 warning 이 너무 많았습니다.
(이것은.. 방문자가 많을 때에는 그누보드의 성능을 심각하게 떨어뜨리는 원인이 됩니다..)
음.. 가장 자주 있는 것은 undefined constant 이고요..
그다음은 Undefined offset, 그다음은 Undefined variable 였습니다.
우선.. undefined constant 를 고치시려면..
$g4[member_table] 이렇게 쓰여있는 것을 모두 $g4['member_table'] 이런 식으로 바꿔줘야 합니다.
undefined offset 은.. 저도 잘 모르겠군요..
undefined variable 은.. 주로 컴색쿼리 생성할 때 쓰이는 변수에서 많이 검출되는데요.. (str, sca 등)
이것들은 스크립트나 변수 넘겨받을 때 초기화만 잘 해주면 됩니다..
아무튼.. 조금이라도 좋아지는 그누보드가 되길 바랄께요.. ^^
댓글 전체
예전 개발 일지를 찾아보면 답이 나옵니다.
저도 초기에 건의했던 사항입니다..
1. 에러 리포팅을 켜고 체크했을 때, 상수관련 에러가 많이 나는 것은 config.php 및 각종 기본환경 관련 변수등을 상수로 정의해서 쓰기 때문입니다.
(물론 꼭 현재 그누보드 방식처럼 선언하지 않아도 지역펑션에서 전역으로 사용은 가능합니다.)
2. offset 관련 에러는 설치한곳의 젠드 버젼을 체크하십시오.
(또는 foreach 문에서 $key => $key as $value 로 변경해주면 에러 리포팅에서 잡히지 않을 것입니다.)
* 그누보드 정도를 제작할 개발자라면 이미 말씀 부분을 알고 있는 사항일 것입니다.
그런데도 수정하지 않은 것은 그만한 이유가 있겠지요.
* 그리고 건의하실때는 타 보드와 비교해 가면서 다른 보드는 이런 기능이 있는데...또는 이 기능은 다른 보드에서는 이렇게 하니까 더 좋던데...라고 하는 것은 상당한 실례가 아닐까? 생각됩니다.
저도 초기에 건의했던 사항입니다..
1. 에러 리포팅을 켜고 체크했을 때, 상수관련 에러가 많이 나는 것은 config.php 및 각종 기본환경 관련 변수등을 상수로 정의해서 쓰기 때문입니다.
(물론 꼭 현재 그누보드 방식처럼 선언하지 않아도 지역펑션에서 전역으로 사용은 가능합니다.)
2. offset 관련 에러는 설치한곳의 젠드 버젼을 체크하십시오.
(또는 foreach 문에서 $key => $key as $value 로 변경해주면 에러 리포팅에서 잡히지 않을 것입니다.)
* 그누보드 정도를 제작할 개발자라면 이미 말씀 부분을 알고 있는 사항일 것입니다.
그런데도 수정하지 않은 것은 그만한 이유가 있겠지요.
* 그리고 건의하실때는 타 보드와 비교해 가면서 다른 보드는 이런 기능이 있는데...또는 이 기능은 다른 보드에서는 이렇게 하니까 더 좋던데...라고 하는 것은 상당한 실례가 아닐까? 생각됩니다.
아.. 타보드와의 비교에서는 오해가 있는 것 같아서 먼저 해명하겠습니다.. ^^
제가 위의 글에서 제로보드와 비교를 한것은..
제로보드에는 이런 기능이 없는데, 그누보드에는 있어서 너무나 좋다.. 라고 한것입니다. (m:n 관계등.)
다만, 멀티 Level 기능을 추가하면 더욱 환상적으로 쓸 수 있을 것 같다... 란 건의를 한 것입니다.. ^^;
이부분은 오해가 없었으면 좋겠습니다.. ^^;
제가 위의 글에서 제로보드와 비교를 한것은..
제로보드에는 이런 기능이 없는데, 그누보드에는 있어서 너무나 좋다.. 라고 한것입니다. (m:n 관계등.)
다만, 멀티 Level 기능을 추가하면 더욱 환상적으로 쓸 수 있을 것 같다... 란 건의를 한 것입니다.. ^^;
이부분은 오해가 없었으면 좋겠습니다.. ^^;
에.. 그리고.. config.php 의 전역변수 설정에 대해서는...
sjsjin 님께서 아무래도 잘못 알고 계신 것 같아서.. 제가 부가설명을 더하겠습니다.
config.php 에서의 각종 변수 설정방식은.. 결코 상수로 처리되지 않고 있음을 먼저 알려드리겠습니다.
그냥 전역변수로 지정되어 있을 뿐입니다.
실제로 common.lib.php 에 보면.. global 키워드를 써서 전역변수를 불러오는 것을 알 수 있고요..
이 부분은 php.net 의 constant 부분을 살펴보시면 명쾌하게 답을 얻을 수 있습니다.. ^^
뭐.. 간단히 요약하자면.. 아차피 상수로 처리되지 않는것.. 확실하게 변수명을 기입하여 notice 를 줄이자..
정도가 되겠네요.. ^^
sjsjin 님께서 아무래도 잘못 알고 계신 것 같아서.. 제가 부가설명을 더하겠습니다.
config.php 에서의 각종 변수 설정방식은.. 결코 상수로 처리되지 않고 있음을 먼저 알려드리겠습니다.
그냥 전역변수로 지정되어 있을 뿐입니다.
실제로 common.lib.php 에 보면.. global 키워드를 써서 전역변수를 불러오는 것을 알 수 있고요..
이 부분은 php.net 의 constant 부분을 살펴보시면 명쾌하게 답을 얻을 수 있습니다.. ^^
뭐.. 간단히 요약하자면.. 아차피 상수로 처리되지 않는것.. 확실하게 변수명을 기입하여 notice 를 줄이자..
정도가 되겠네요.. ^^
상수처리 안되는건 당연히 알고 있습니다.
php.net, dev.mysql.net, w3c, msdn 은 당연히 수시로 이용하고, 주의점 및 중요 레퍼런스도 당연히 상세히 보고 또 봅니다.
지금도 여전히 까먹으면 한 번씩 보기도 합니다.
제가 얘기한 요점은, 사용에 문제를 초래하지 않는다면, 그누보드 개발자분이 처리한 의도를 그냥 이해하고 사용하는 것도 좋은 방법이라는 뜻이었습니다.
저 또한 그렇지만 모든 개발자가 표준 권장사항을 꼭 맞춰서 제작할수는 없는 일입니다.
물론 짚어주신 부분이 서버로그에 상당한 영향을 미치는건 사실이나, 이미 호스팅업체나, 단독서버(상업적 - 개인테스트용이 아닌 -)를 사용하여 사이트를 운영하는 곳에서는 크론등을 이용하여 자동 로그정리나, 중요로그만 체크해서 로그를 쓰도록 합니다.
그러므로 일반 이용자들에게는 전혀 문제가 되지 않는 부분이지요.
그리고 확실하게 기입하는 걸 목적으로 하려면,
- 쿼리문에 들어가는 모든 변수는 더블쿼터로 다시 감싸줘야 하고,
( $sql = "insert into aaa set name='".$member['name']."' "; 이렇게 해야겠죠.)
쿼리결과를 출력할때도 싱글쿼터로 필드명을 감싸줘야 하겠죠. ($member['name'] 처럼)
아시겠지만 php 파싱을 안하고, 상수가 아니기 때문입니다.
* 이미 익숙해져버린 습관은 고치기 힘든부분이 있습니다.
php.net, dev.mysql.net, w3c, msdn 은 당연히 수시로 이용하고, 주의점 및 중요 레퍼런스도 당연히 상세히 보고 또 봅니다.
지금도 여전히 까먹으면 한 번씩 보기도 합니다.
제가 얘기한 요점은, 사용에 문제를 초래하지 않는다면, 그누보드 개발자분이 처리한 의도를 그냥 이해하고 사용하는 것도 좋은 방법이라는 뜻이었습니다.
저 또한 그렇지만 모든 개발자가 표준 권장사항을 꼭 맞춰서 제작할수는 없는 일입니다.
물론 짚어주신 부분이 서버로그에 상당한 영향을 미치는건 사실이나, 이미 호스팅업체나, 단독서버(상업적 - 개인테스트용이 아닌 -)를 사용하여 사이트를 운영하는 곳에서는 크론등을 이용하여 자동 로그정리나, 중요로그만 체크해서 로그를 쓰도록 합니다.
그러므로 일반 이용자들에게는 전혀 문제가 되지 않는 부분이지요.
그리고 확실하게 기입하는 걸 목적으로 하려면,
- 쿼리문에 들어가는 모든 변수는 더블쿼터로 다시 감싸줘야 하고,
( $sql = "insert into aaa set name='".$member['name']."' "; 이렇게 해야겠죠.)
쿼리결과를 출력할때도 싱글쿼터로 필드명을 감싸줘야 하겠죠. ($member['name'] 처럼)
아시겠지만 php 파싱을 안하고, 상수가 아니기 때문입니다.
* 이미 익숙해져버린 습관은 고치기 힘든부분이 있습니다.
그리고.. offset 관련 에러는... 제가 만든 부분에서 발생하는 것이 아니라.
/adm/admin.head.php 등에서 보면..
34번 라인 : $menu[$key][$i][3]
45번 라인 : $menu[$key][$i][1]
위와 같이 직접적으로 수치를 집어넣은 offset 에서 발생하고 있습니다.
이건.. admin 소스이기 때문에, 제가 어떻게 함부로 할 수 없는 부분이라서.. 제작자님의 협조를 구할 수 밖에 없네요.. ^^;;
이렇게 하나하나 수정해 나가다보면, 세계 어디에 내놔도 손색없는 훌륭한 보드가 될 것으로 생각합니다.. ^^
/adm/admin.head.php 등에서 보면..
34번 라인 : $menu[$key][$i][3]
45번 라인 : $menu[$key][$i][1]
위와 같이 직접적으로 수치를 집어넣은 offset 에서 발생하고 있습니다.
이건.. admin 소스이기 때문에, 제가 어떻게 함부로 할 수 없는 부분이라서.. 제작자님의 협조를 구할 수 밖에 없네요.. ^^;;
이렇게 하나하나 수정해 나가다보면, 세계 어디에 내놔도 손색없는 훌륭한 보드가 될 것으로 생각합니다.. ^^
상수 문제는
http://www.php.net/manual/en/language.types.array.php
에서
<i>Why is $foo[bar] wrong?</i>부분을 보시면 설명이 있습니다.
성능을 떨어 뜨리죠.
http://www.php.net/manual/en/language.types.array.php
에서
<i>Why is $foo[bar] wrong?</i>부분을 보시면 설명이 있습니다.
성능을 떨어 뜨리죠.
뭔 말인지는 몰겠지만,
중요한 글인듯...
중요한 글인듯...