생각하는섬 http://reedyfox.com ko 팀블로그 생각하는섬, 아웃사이더 크리스찬들의 바닷가 잘 지내시죠! http://reedyfox.com/island.php/board/2701 이 게시판 오랜만이네요 ㅎㅎ
잘 지내시죠?! ]]>
일반 정낙훈 2018-10-05T11:11:17+09:00
PHP 5 이상으로 이전시 로그인 안되는 문제 http://reedyfox.com/island.php/building/89 Mysql 4.1 버전에서 제로보드 호환에 문제가 되는 이유

1. PASSWORD 함수의 사용바이트 수 증가
기존 4.0 까지의 password() 함수는 함호화를 위해 16 바이트를
사용했는데 4.1 부터는 41 바이트를 사용합니다.
그리고 4.1 에서 4.0 이전의 16 바이트 함수는 old_password() 라는
이름으로 바뀌었습니다.

아래는 4.1 에서의 간단한 예입니다.

mysql> select password('aabbcc');
+-------------------------------------------+
| password('aabbcc') |
+-------------------------------------------+
| *2413A83E64BC8C0B97D3072004D15A19E48A1C00 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select old_password('aabbcc');
+------------------------+
| old_password('aabbcc') |
+------------------------+
| 2cbf598202278785 |
+------------------------+
1 row in set (0.00 sec)

mysql> select length(password('aabbcc'));
+----------------------------+
| length(password('aabbcc')) |
+----------------------------+
| 41 |
+----------------------------+
1 row in set (0.00 sec)

mysql> select length(old_password('aabbcc'));
+--------------------------------+
| length(old_password('aabbcc')) |
+--------------------------------+
| 16 |
+--------------------------------+
1 row in set (0.00 sec)



2. 테이블 생성 스키마 제한

제로보드에서 새 테이블을 생성할때 소스 디렉토리의 schema.sql 이라는 파일을
통해서 생성합니다.
Mysql 4.1 에서는 create table 에서

create table $admin_table (
no int(11) default '0' not null auto_increment primary key,
group_no int(20) unsigned not null,
....

와 같이 auto_increment 옵션을 준 칼럼에 default '0' 과 같은
디폴트 값을 같이 사용할 수가 없습니다.

그렇게 사용하면 아래 처럼 에러가 납니다. 당연히 제로보드에서
테이블 생성이 안됩니다.


mysql> create table aaaa ( id int default '0' not null auto_increment primary key );
ERROR 1067 (42000): Invalid default value for 'id'

mysql> create table aaaa ( id int not null auto_increment primary key );
Query OK, 0 rows affected (0.01 sec)




위 두가지만 잘 이해하면 Mysql 4.1 에서 제로보드 사용시 발생하는 에러들의 원인을
찾을 수가 있습니다.
좀더 구체적으로 보면..


[무조건 해야하는 작업]

제로보드를 처음으로 설치해서 사용하든 이전 제로보드데이타와 소스를 옮기든지
반드시 무조건 해야하는 작업은 schema.sql 이라는 파일에서
default '0' not null auto_increment 이부분에서 default '0' 을 삭제합니다.
모든 default '0'을 삭제하는 것이 아니라 반드시 auto_increment 와 같이 사용되는
칼럼의 default '0' 을 삭제합니다.

그리고 패스워드 저장하는 칼럼의 크기도 이전 20 에서 41 로 늘려주는 것이
좋습니다. 아래에서 다시..










[ 4.1 버전의 새 password() 함수를 사용할 경우]

최초로 제로보드를 깔아서 사용하려는 사람들에게 적용될 듯합니다.
좀더 보안이 강화된 4.1 버전의 password 함수를 사용하려면 php 소스는
그대로 두고 schema.sql 파일을 추가 수정해야 합니다.

위에서는 schema.sql 의 default '0' 부분만 수정했는데
이번에는 password 를 저장하는 칼럼의 크기를 늘려야 합니다.

기존의 password 칼럼은 20 혹은 18 등의 크기로 되어 있는데

password char(20)

이부분을 41 로 수정해 줍니다.
schema.sql 에서

29 라인의 password char(20) not null,
38 라인의 jumin char(18),
234 라인의 password char(20),
288 라인의 password char(20),


모두 4 곳을 41 로 크기를 수정해 줍니다.
제로보드에서는 주민등록번호도 암호화를 하므로 jumin 칼럼도
수정해 줘야 합니다. 이 외에도 빠진부분이 있는지는 각자 알아서
체크해보시길.

이와 같은 작업은 실제 설치를 시작하게 전에 해줘야 합니다.
수정하지 않고 설치후 에러가 났을 경우에는 생성된 DB 를
삭제해주고 config.php 파일을 삭제한후 다시 install.php 를
실행해서 첨부터 다시 설치를 하시면 됩니다.




[이전 4.0 이하 버전의 password() 함수를 그대로 사용할 경우]

4.0 이전의 password()함수는 mysql 4.1x 에서는 old_password() 라는
함수로 사용할 수 있습니다.
이미 mysql 4.0 이하버전에 제로보드로 많은 회원과 게시판들을 운영하고
있었던 경우 그 데이타를 그대로 살리면서 4.1로 옮길때 적용할 수 있습니다.

우선 제로보드의 php 소스에서 사용된 모든 password() 함수를 old_password() 함수로
고치면 됩니다. 말이 쉽지 작업하기 장난 아닙니다.
일단 어떤 소스에서 password() 함수를 쓰는지 보려면..

[root@haansoft bbs]# pwd
/var/www/html/bbs
[root@haansoft bbs]# grep -R -i -l "password(" ./*
./admin/admin_exec_member.php
./admin/admin_view_member.php
./comment_ok.php
./del_comment_ok.php
./delete_ok.php
./install2_ok.php
./login_check.php
./lostid_search.php
./member_join_ok.php
./member_modify_ok.php
./member_out.php
./view.php
./write_ok.php
[root@haansoft bbs]#

와 같은 파일들이 password() 함수를 씁니다. 구체적인 라인의 내용을 보려면
grep -R -i "password(" ./* 와 같이 -l 옵션을 빼고 grep 명령을
내려보면 됩니다.
위 13 개 파일을 열어서 password("$password") 와 같은 부분을
old_password("$password") 와 같이 수정해 주면 됩니다.

출처 : http://kasua.namoweb.net/zb41pl4/bbs/skin/ggambo7002_board/print.php?id=home&no=102  [새창에서 열기]




오늘 우연하게(?) 봄이 받고 있는 호스팅 업체에 제로보드를 설치해 주다가 수정한 것입니다.

환경은
PHP : 5.x
MySQL : 5.x
이렇습니다.

현상은 다음과 같습니다
admin.php 페이지에서 로그인 id/pw 정상적으로 입력을 했음에도 불구하고 admin-setup.php로 넘어가지 않는 것입니다.

먼저 login_check.php 파일을 열어 봅니다.

session_register("zb_logged_no");
session_register("zb_logged_time");
session_register("zb_logged_ip");
session_register("zb_last_connect_check");
이런 게 있습니다.

혹시나 해서
print_r($_SESSION);
을 했더니 빈값입니다.

우선은 login_check.php 파일부터 손을 잠깐 보겠습니다.
위에 저 부분을

$_SESSION["zb_logged_no"] = $zb_logged_no;
$_SESSION["zb_logged_time"] = $zb_logged_time;
$_SESSION["zb_logged_ip"] = $zb_logged_ip;
$_SESSION["zb_last_connect_check"]= $zb_last_connect_check;
이렇게 바꿉니다.
print_r($_SESSION);
을 하게 되면

Array
(
[zb_last_connect_check] => 0
[zb_logged_no] => 1
[zb_logged_time] => 1229406938
[zb_logged_ip] => xxx.xxx.xxx.xxx <- 이거는 자체 필터링;; 쿨럭
)

이렇게 나오네요.

php.ini에 보면 register_globals라는 항목이 있는데 Off로 되어 있기 때문에 그렇습니다.
우리나라의 경우는 어지간한 호스팅 업체는 On입니다.
보안이나 이런 것들을 위해서도 Off로 사용하시는 게 좋습니다.
자 이제 됐으니 다시 로그인을 해 봅니다.
또 아까와 같은 상황입니다.

세션은 정상적으로 생성이 되었습니다.

혹시나 해서 admin.php 소스를 보면 admin_setup.php 페이지로 넘기는 부분이 보이고
<?
include "lib.php";
$connect=dbConn();
$member=member_info();
if(($member[no]&&$member[is_admin]<3&&$member[is_admin]>=1)||($member[no]&&$member[board_name])) move page("admin_setup.php");
이렇게 되어 있습니다.
if문에 있는 조건에 부합하지 않다는 거겠죠.

이번엔 lib.php를 열어 봅니다.
$member=member_info();
얘를 먼저 봅니다.
member_info()라는 함수를 검색해 보겠습니다.

function member_info() {
global $HTTP_SESSION_VARS, $member_table, $member, $connect;
if(defined("_member_info_included")&&$member[no]) return $member;
define("_member_info_included", true);
if($member[no]) return $member;
if($HTTP_SESSION_VARS["zb_logged_no"]) {
$member=mysql_fetch_array(mysql_query("select * from $member_table where no ='".$HTTP_SESSION_VARS["zb_logged_no"]."'"));
if(!$member[no]) {
unset($member);
$member[level] = 10;
}
} else $member[level] = 10;
return $member;
}
저렇게 나오네요.
위에 또 이상한 게 보입니다.

$HTTP_SESSION_VARS;
$HTTP_SESSION_VARS["zb_logged_no"];

php.ini에서 register_long_arrays가 Off로 되어 있으면 저렇게 긴 녀석도 사용을 할 수가 없습니다.
참고로 PHP6에선 아예 삭제한다고 합니다.
그러니 아예 지금부터 사용을 않는 게 좋겠죠.
http://kr2.php.net/manual/kr/function.session-register.php  [새창에서 열기]
$_SESSION;
$_SESSION["zb_logged_no"];

이렇게 바꿔 주시면 됩니다.
이제 정상적으로 잘 되는지 테스트 해 보시기 바랍니다.



출처: http://www.nyaongnyaong.com/636 [새창에서 열기] [zzin]
]]>
일반 리디 2018-06-10T00:36:23+09:00
구글 주소록 동기화 오류 해결방법 http://reedyfox.com/island.php/fox/1942 구글 주소록 계정과 스마트폰 단말간 동기화가 갑자기 안될 때

스마트폰 환경 설정 > 앱 > 주소록 저장소(또는 연락처 저장소)

위로 들어가셔서 앱을 강제종료 해주시면 됩니다.

"주소록" 앱이 아니라 "주소록 저장소" 라는 앱이 따로 있습니다.
만약 주소록 저장소가 안 보이면 오른쪽 상단 메뉴에서 "시스템 표시"를 선택해주시면 됩니다. ]]>
헤드라인 리디 2018-06-07T15:10:16+09:00
스타벅스 WiFi 접속이 잘 안되는 경우 해결방법 http://reedyfox.com/island.php/fox/1941 스타벅스에서 인터넷 브라우저 열면 스타벅스 와이파이 로그인(KT) 창이 떠야 되는데

1) 이게 아예 안 떠서 접속을 못하거나
2) 안 떴지만 접속은 된 걸로 나오는데 실제로 인터넷 연결은 안되는 경우

인터넷 브라우저 주소창에 www.olleh.com 를 입력하고 접속해보세요.
로그인 창이 뜹니다.

이런 일이 자주 발생하는 경우, 아예 즐겨찾기에 저 URL을 저장해두시면 편리합니다. ]]>
헤드라인 리디 2018-06-07T11:22:58+09:00
베가스 렌더링 100%에서 오류 발생하는 경우 http://reedyfox.com/island.php/fox/1940 베가스 프로 12 기준,

렌더링 잘 하고 100% 됐는데 오류 창이 뜨는 경우 황망하다. 생성된 파일은 재생해도 안되고. 인터넷을 검색해서 여러 방법을 써보지만 안된다. 컴퓨터 리부트 해서 렌더링해도 안되고.

정 안될 땐 다음 방법을 시도해 보라.

Render As > Customize Template > (하단 탭) Audio > Bitrate

Bitrate를 128,000 정도로 낮춘 다음 렌터링을 하면 해결될 수 있다. ]]>
헤드라인 리디 2017-12-15T07:46:02+09:00
아사 왕 http://reedyfox.com/island.php/fox/1939 역대하 15장은 참 감동적인 말씀입니다. "내 말을 들으라 너희가 여호와와 함께 하면 여호와께서 너희와 함께 하실지라 너희가 만일 그를 찾으면 그가 너희와 만나게 되시려니와 너희가 만일 그를 버리면 그도 너희를 버리시리라(역대하 15장 2절)"

아사는 왕위에 오른지 이미 15년째로 권력에 취하고 세속에 닳고닳기에 충분한 기간이었습니다. 그럼에도 불구하고 예언자 오뎃의 선포를 듣고 자신의 지난 삶을 돌이켜 유다 땅의 모든 더러운 것을을 없앴으며 오직 하나님만을 온전히 섬기기로 결단했습니다. 그의 결단은 심지어 자신의 어머니인 마아가가 우상을 만들었다는 이유로 태후의 자리에서 물러나도록 할만큼 결연한 것이었습니다. 아사는 이토록 평생 온전한 마음으로 하나님을 섬겼습니다. "이 때부터 아사 왕 제 삼십오년까지 다시는 전쟁이 없으니라(역대하15장19절)"

그러나 역대하 16장은 20년동안 태평성대를 누리던 아사 왕이 한 순간에 무너지고 불과 6년만에 죽음을 맞이하는 모습을 보여줍니다. "이 일은 왕이 망령되이 행하였은즉 이후부터는 왕에게 전쟁이 있으리이다 하매(역대하16장9절)"

아사 왕이 무너진 이유는 다음과 같습니다.

1. 고난이 없는 삶
20여년 동안 고난이 없는 삶은 결과적으로 그에게 복이 아니라 독이 되었습니다. 준비되어 있지 않았던 그에게 20여년만에 고난이 찾아오자 하나님이 아니라 사람의 방법을 찾게 됩니다. 평안한 삶이 지속될 때 오히려 더욱 깨어있을 수 있기를 간구해야 합니다.

2. 사람의 계획
아사 왕의 계획과 방법은 완벽했습니다. 적은 물러갔고 기대치 않았던 소득도 올릴 수 있었습니다. 하지만 하나님은 결과적인 성공이 아니라 과정의 승리를 원하셨습니다. 하나님의 얼굴을 구하지 않고 자신이 보기에 완벽하고 옳은 길을 찾았던 아사 왕에게 하나님은 "나를 향하지 않는 자"라고 평가했습니다. 그리고 그 순간부터 전쟁이 찾아왔습니다. 20년간의 평화가 마치 사람의 계획으로 유지된 것 같이 착각했으나 하나님이 함께 하시지 않자 그 평화는 이내 끝나고 맙니다.

3. 멸망을 초래하는 자존심
아사 왕은 자신의 잘못을 지적한 선지자 하나니를 감옥에 가두고 직언을 한 다른 사람들도 괴롭힙니다. 누구나 실수할 수 있고 그 실수를 지적받아 깨달았을 때 부끄러울 수 있습니다. 하지만 부끄러움은 잠시입니다. 내 잘못을 인정하고 돌이킬 수 있는 기회가 주어졌을 때 자존심을 내려놓지 못하면 아사 왕과 같이 하나님이 기뻐하시는 승리한 왕에서 하나님을 떠난 실패한 왕이 되는 것은 한 순간입니다.
]]>
헤드라인 리디 2017-03-08T05:00:35+09:00
새해에도 복 많이 받으세요^^ http://reedyfox.com/island.php/board/2700 저는 지난 해 사귀던 여성분께서 형사고소를 하시는 바람에 이것저것 마음고생이 심했습니다.
아직 법원 판결을 기다리는 중이긴 합니다만, 곧 끝나겠지요 ^^
좋은 인연을 만난다는게 이렇게 어려운 일인지 몰랐지요. ㅎ
리디님처럼 좋은 아빠가 되고 싶은 소망인데 사는게 참 어렵네요 .
그럼 병신년도 마무리 잘 하시고 좋은 새해 맞이하시길 바랍니다. ^^ ]]>
일반 정낙훈 2016-12-28T23:53:53+09:00
form name 주의사항 http://reedyfox.com/island.php/fox/1938 form name은 절대 write으로 하지 말 것.
인터넷 익스플로어에서 동작하지 않음.
(크롬에서는 동작)
]]>
헤드라인 리디 2016-02-10T00:25:26+09:00
눈보라를 뚫고 00 - 표지 http://reedyfox.com/island.php/later/93 (추가 중) ]]> 일반 리디 2016-01-05T07:24:27+09:00 잘지내시죠? http://reedyfox.com/island.php/board/2699 어둠의 경로가 있어서 몰래 사용하는거 아닌지요 ㅎㅎ
ps. 헉.. alt+s를 취소 버튼에 넣어두셨군요;; ]]>
일반 정낙훈 2015-10-23T11:21:06+09:00