테스트 사이트 - 개발 중인 베타 버전입니다

wr_content 내용이 길 경우 mediumtext 그누보드5 변경된 방식

wr_content의 내용이 길어서 불가피하게 DB 설정을 mediumtext로 변경하는 경우가 있습니다.

보통은 DB에서 mediumtext로 변경해주면 해결이 되는데,
아무리 DB에서 wr_content 의 형식을 mediumtext나 longtext로 변경을 해봐도,
항상 저장되는 내용은 text 크기인 65536byte만 저장이 되더라구요.


이리저리 원인을 찾다가 write_update.php 소스를 열어보니,
17번째 줄부터

$wr_content = '';
if (isset($_POST['wr_content'])) {
$wr_content = substr(trim($_POST['wr_content']),0,65536);
}

이런 소스가 첨부가 되어 있더라구요,
그래서 DB 설정을 아무리 바꿔봐도 안되었던 것 같습니다.

혹시나 참고하실 분들이 생길까봐 팁자료실에 메모 남겨둡니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 11개

그렇군요...

TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB
헉.. 꼭 수정되어야할 내용이군요.
보통 제가 한글파일로 작성해서 그대로 붙여넣기하는경우가 많은데,
내용이 조금 긴경우 64kb가 넘어갑니다. 모르고 있었으면 한참 찾을뿐했네요.
좋은 정보 감사합니다.
1. 테이블의 wr_content 필드 속성을 text 에서 MEDIUMTEXT 또는 LONGTEXT 로 변경합니다.

참고로 필드 속성에 따라 저장되는 글자수는 다음과 같습니다.
tinytext 256 bytes
text 65,535 bytes ~64kb
mediumtext 16,777,215 bytes ~16MB
longtext 4,294,967,295 bytes ~4GB


2. / bbs / write_update.php 의 17줄

if (isset($_POST['wr_content'])) {
$wr_content = substr(trim($_POST['wr_content']),0,65536);
}

를 아래와 같이 변경합니다.

if (isset($_POST['wr_content'])) {
$wr_content = substr(trim($_POST['wr_content']),0,65536);
if ($is_admin) { // 관리자일때는 65,535자 이상 ... 물론 디비 필드 속성을 상향한 경우에만 사용하세요.
$wr_content = $_POST['wr_content'];
}
}


3. / lib / editor.lib.php 의 11줄

return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\" maxlength=\"65536\">$content</textarea>";

를 아래와 같이 변경

if ($is_admin) { // 해피정닷컴 추가 (2014-03-02)
return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\">$content</textarea>";
} else { // 해피정닷컴 추가 (2014-03-02)
return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\" maxlength=\"65536\">$content</textarea>";
} // 해피정닷컴 추가 (2014-03-02)



4. 향후 생성되는 게시판은 모두 긴 내용이 입력되도록 할때는
/ adm / sql_write.sql 의 12라인 내용을 변경합니다.

`wr_content` text NOT NULL,

를 아래와 같이 변경

`wr_content` mediumtext NOT NULL,

이후업데이트는 아래 경로에서 확인할수 있습니다. 중복자료가 될수 있기에 별도 팁으로 올리지 않습니다.
http://www.happyjung.com/bbs/board.php?bo_table=lecture&wr_id=1656
좋은 정보 감사합니다
님이 쓰신 대로 해보았는데요
제가 초보라 말씀하신대로 실행이 되지 않고 있습니다
님의 홈페이지에도 가 보았는데요
글을 쓰신 이후에 내용이 변한것이라도 있는지해서 조언 부탁드립니다
삽입된 소스이고요, 종류는 mediumtext로 변경하였습니다

**** /www/bbs/write_update.php

if (isset($_POST['wr_content'])) { $wr_content = $_POST['wr_content']; // 해피정닷컴 수정 (2015-05-18)
//$wr_content = substr(trim($_POST['wr_content']),0,65536);
$wr_content = preg_replace("#[\\\]+$#", "", $wr_content);
}

**** /www/lib/editor.lib.php

return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\">$content</textarea>"; // 해피정닷컴 수정 (2015-05-18)
음... 특별히 변동된것은 없구요.
사이트 제작하면서 코드 변경이 있는경우엔 제 홈페이지에 업데이트를 합니다.
웹에이전시를 운영중이라서 적용할때마도 제가 정리한 코드를 찾아서 적용하고, 오류가 있으면 확인후 업데이를 하고는 있습니다.
[code]

/* /lib/common.lib.php에 추가 */

function get_wr_content_size()
{
$sql = "SELECT COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '%s'
AND COLUMN_NAME = '%s'
AND TABLE_SCHEMA = '%s'";

$sql = sprintf($sql, $GLOBALS['write_table'], 'wr_content', G5_MYSQL_DB);

$query = mysql_query($sql);
$row = mysql_fetch_array($query, MYSQL_NUM);

switch (strtolower($row[0])) {
case 'tinytext': return 256;
case 'text': return 65535;
case 'mediumtext': return 16777215;
case 'longtext': return 4294967295;
}
}



/* /bbs/write_update.php 의 17줄 */
$wr_content = substr(trim($_POST['wr_content']),0,get_wr_content_size());



/* /lib/editor.lib.php 의 11줄 */

return '<textarea id="'.$id.'" name="'.$id.'" style="width:100%;" maxlength="'.get_wr_content_size().'">'.$content.'</textarea>';

[/code]

Edit: 2016.03.10 오후 7:08. 오타가 있었는데 아무도 말이 없었네요.
^^ 유용한팁 감사합니다
오... 좋은 정보 감사합니다!!
감사합니다~

게시판 목록

그누보드5 팁자료실

글쓰기