방문자님의 제보로 제로보드4 utf-8 버젼의 버그 하나를 발견해서 수정해 보기로 했다.

원인은 url 로 한글이 그대로 보내져서 제대로 파싱을 못하는것이었다.

해결책은 아래와 같다.

1. 아래 파일들을 텍스트 에디터로 연다.

zboard.php, view.php, write.php, _head.php
2. 열린 파일을 에서 아래 텍스트를 검색해서 모두 수정한다.
찾을 텍스트 : keyword=$keyword
변경할 텍스트 : keyword=".urlencode($keyword)."
3. 단 여기서 _head.php 파일은 변경할 텍스트를 아래와같이 수정한다.
변경할 텍스트 : keyword=".urlencode($keyword)

신고
by cranix 2007.10.14 10:53

PHP 에서 날짜 출력할때 사용하는 함수.

date(format,timestamp)

a : "am" or "pm" 표시
A : "AM" or "PM" 표시
d : 오늘이 몇일인지 표시 "01" to "31"
D : 영문으로 요일을 표시 "Mon", "Fri"
F : 영문으로 달을 표시 "January", "July"
h : 12시간을 표시. 오후 3시라도 03으로 표시. "01" to "12"
H : 24시간을 표시. 오후 3시 경우 15로 표시. "00" to "23"
g : 12시간을 표시. h와 다른 점은 0이 없다. "1" to "12"
G : 24시간을 표시. H와 다른점은 0이 없다. "0" to "23"
i : 분을 표시. "00" to "59"
j : 오늘이 몇일인지 표시. d와 다른 점은 0이 앞에 없다. "1" to "31"
l(소문자 엘) : "Friday"식으로 표시
m : 달(month)을 표시. "01" to "12"
n : 달을 표시. 0없이 "1" to "12"
M : "Jan"으로 표시
s : 초(sec)를 표시 "00" to "59"
t : 이번 달의 마지막 표시 "28" 부터 "31"일 까지
U : 기준 시점(GMT 1970년 1월 1일 00:00:00)으로부터 지난 시간을 초로 표시
w : 이번 주를 숫자로 표시 "0"(일요일) 부터 "6"(토요일)로 표시
Y : 연도(year)를 4자리로 표시. "2001"
y : 연도를 2자리로 표시. "01"
z : 올해부터의 날(day) 표시. "0" 부터 "365" 로 표시

strtotime(datestr) : 스트링형태의 날짜를 php timestamp 로 바꿔주는 함수
- mysql 날짜 함수를 그대로 php 로 바꿀때 많이 쓰인다.
신고
by cranix 2007.08.15 22:37

DATE_FORMAT 로 날짜 출력할때 사용하는 함수.

DATE_FORMAT(date,format) 

%M  Month name (January..December)  
%W  Weekday name (Sunday..Saturday)  
%D  Day of the month with English suffix (1st, 2nd, 3rd, etc.)  
%Y  Year, numeric, 4 digits  
%y  Year, numeric, 2 digits  
%X  Year for the week where Sunday is the first day of the week, numeric, 4 digits, used with \'%V\'  
%x  Year for the week, where Monday is the first day of the week, numeric, 4 digits, used with \'%v\'  
%a  Abbreviated weekday name (Sun..Sat)  
%d  Day of the month, numeric (00..31)  
%e  Day of the month, numeric (0..31)  
%m  Month, numeric (01..12)  
%c  Month, numeric (1..12)  
%b  Abbreviated month name (Jan..Dec)  
%j  Day of year (001..366)  
%H  Hour (00..23)  
%k  Hour (0..23)  
%h  Hour (01..12)  
%I  Hour (01..12)  
%l  Hour (1..12)  
%i  Minutes, numeric (00..59)  
%r  Time, 12-hour (hh:mm:ss [AP]M)  
%T  Time, 24-hour (hh:mm:ss)  
%S  Seconds (00..59)  
%s  Seconds (00..59)  
%p  AM or PM  
%w  Day of the week (0=Sunday..6=Saturday)  
%U  Week (0..53), where Sunday is the first day of the week  
%u  Week (0..53), where Monday is the first day of the week  
%V  Week (1..53), where Sunday is the first day of the week. Used with \'%X\'  
%v  Week (1..53), where Monday is the first day of the week. Used with \'%x\'  
%%  A literal `%\'.  
신고
by cranix 2007.08.15 22:35

[code]<?
$fileDir = "해당디렉토리";
$completeFilePath=$fileDir./.$fileName;
$length = filesize($completeFilePath);
$size = $length;
header("Content-Type: application/ms-x-download");
header("Content-Type: application/octet-stream");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=$fileName");
header("Content-Transfer-Encoding: binary");

$fh = fopen($completeFilePath, "r");
fpassthru($fh);
exit;

?>[/code]


ㅇㅋ 바로 이걸원했어!

신고
by cranix 2007.07.31 03:09

어떤 파일은 업로드가 안되고..

업로드 누르면 아무 반응이 없어서 확인해 봤더니..

php.ini 파일에서 업로드가 2메가 설정되어 있어서 그런것이었다.

upload_max_filesize = 10M

아래와같이 일단 10메가로 늘려주었더니 된다.

신고
by cranix 2007.04.11 09:40

몇일전 제로보드를 utf-8 환경으로 컨버팅 한적이 있는데.

그후에 몇가지 오류가 발견되었다.

이건 그중에 하나로 최근게시물 같은데서 문자열을 자를때 잘린 문자가 깨져서 나오는 경우이다.

php 의 strlen 으로 한글 한글자의 길이를 확인해본결과 3 이었다.

기존에 zb4 가 개발되던 euc-kr 환경은 2였기때문에 cut_str 함수를 수정해 줄필요가 있다.

수정은 아래와같이 했다.

lib.php 파일의 cut_str 함수를 아래와같이 수정한다.

[code]function cut_str($msg,$cut_size) {
  if($cut_size<=0) return $msg;
  if(ereg("\[re\]",$msg)) $cut_size=$cut_size+4;
  
  $max_size = $cut_size;
  $i=0;
  while(1) {
   if (ord($msg[$i])>127)
    $i+=3;
   else
    $i++;

   if (strlen($msg) < $i)
    return $msg;

   if ($max_size == 0)
    return substr($msg,0,$i)."...";
   else
    $max_size--;
  }
}[/code]


끄읏.

신고
by cranix 2007.03.16 18:32
먼저 DB 는 바로 아래쓴 MYSQL utf8 로 변경하기에서 설명한대로 하면 변경된다.
이젠 제로보드 파일들을 모두 변경해 줘야하는데 모든 파일을 아래 명령어로 컨버팅 해주면 된다.
# iconv -f UHC -t utf-8 -o [파일명].tmp [파일명]

그러나 너무많다.
그럼 아래와같이 스크립트를 작성해서 돌리도록 한다.
#!/bin/sh
for i in $( find . -name "*.php" ); do
if [ -f $i ]
then
/usr/bin/iconv -f UHC -t utf-8 -o $i.tmp $i
mv -f $i $i.bak
mv -f $i.tmp $i
fi
done

다 돌렸으면 파일수정을 약간 해줘야한다.
일단 lib.php 파일을 열어서 euc-kr,EUC-KR 로 검색해서 utf-8 로 바꿔준다.

변경이 끝났으면 기타 txt 파일을 찾아서 변경해 주면 완료된다.
예를들어 admin 디렉토리에 있는 텍스트파일들도 변경해주면 된다.

자 이제 그럼 파일 변경이 모두 끝났다.
신고
by cranix 2007.03.09 23:15

친구 테터툴즈를 좀 수정해달라고 부탁을 받아서

로그인을 하려고 했으나 로그인이 안되는것이다.

아이디와 비번을치고 로그인을 누르면 그상태에서 다음단계로 진행이 안됬다.

이상해서 친구한테 연락해봤더니 친구는 된단다..ㅡ.ㅡ;

몇일동안 헤메대가 결국 답을 찾았다.

문제는 도메인이었다.

설치시 도메인앞에 www 를 붙혀서 설치했다면 로그인할때도 www 를 붙혀서 로그인해 줘야한다.

단 여기서 신기한건 www 를 붙히지 않고 설치를 하게되면 www를 붙히던 안붙이던 로그인이 된다는 것이다.

결국 www 를 붙히지 않고 설치하면 되는것이다.

뭐 이미 설치했는데 재설치 하기는 그렇고 해서 찾아본결과

config.php 파일에서 www 를 빼줬더니 해결이 되었다.

아놔.. 버그인가.

신고
by cranix 2007.03.04 21:03
| 1 |