Rockylinux8 에서의 PHP 8.3 컴파일 시 나올 수 있는 에러와 이에 대한 대응방법 정리.

1. mbstring 관련

/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `mb_utf16be_to_wchar' with pointer 
equality in `ext/mbstring/libmbfl/filters/mbfilter_utf16.o' can not be used 
when making an executable; recompile with -fPIE and relink with -pie
collect2: error: ld returned 1 exit status
make: *** [Makefile:307: sapi/cli/php] Error 1

해결책 (컴파일 옵션에 CFLAGS="-fPIE" LDFLAGS="-pie"  추가)

./configure CFLAGS="-fPIE" LDFLAGS="-pie"

원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

+++++++++++++++++++++++++++++++++++++++++++++++++++++++



아래와 같은 오류가 발생하면, 99.9% /etc/mail/local-host-names 설정이 잘못되어 있기 때문이다.

  ----- The following addresses had permanent fatal errors -----
<center@center.co.kr>
  (reason: 553 5.3.5 system config error)

  ----- Transcript of session follows -----
553 5.3.5 217.129.242.1. config error: mail loops back to me (MX problem?)
554 5.3.5 Local configuration error


local-host-names 파일에 center.co.kr 도메인 이름을 추가하고,

sendmail 데몬을 다시 시작하면, 메일을 받을 수 있다.

물론, center.co.kr 도메인에 대한 MX 레코드가 해당 메일 서버로 지정되어 있어야만 한다.

 

출처 : https://ischo.net/bd_sun/757

출처 : http://coffeenix.net/board_view.php?bd_code=1678

제  목 : find명령에서 특정 디렉토리 제외하고 찾기(exclude)
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2009.7.3(금)

find 명령을 할 때, 특정 디렉토리 제외하고 find하는 방법은 없느냐고 주위분이 물어오셨다. 
개인적으로는 find에서 특정 디렉토리를 exclude하는 것 대신에 디렉토리를 나열하는 방법을 사용했다. 그러나 디렉토리 갯수가 많고, 같은 depth의 디렉토리가 아니고 하위 특정 디렉토리 몇개를 exclude해야한다면? 옵션을 활용할 수 밖에 없을 것이다.

man페이지를 확인해보니 -prune옵션이 있다. -prune 옵션은 찾아낸 것이 디렉토리이면 그 디렉토리내에는 find하지 않는다.

 
-name pattern
       ... 생략 ...
       To ignore a directory and the files under it, use -prune; see an example in the description of -wholename.

-prune If -depth is not given, true; if the file is a directory, do not descend into it.
       If -depth is given, false; no effect.
 



1. 예제로 살펴보기

[예제 1] 2009가 포함된 파일을 찾는다. 단 파일명이 디렉토리에 해당되면 해당 디렉토리 이하는 찾지 않는다.

find (전체 보기)
./
./check/check_list_2008_12.php
./check/check_list_2009_05.php
./check/check_list_2009_06.php
./2007_10_mobile
./2008_01_highlight
./2008_01_highlight/view.pl
./2008_01_highlight/view.sh
./2009_03_MSIE8
./2009_03_MSIE8/get_MSIE8.sh
./2009_05_apache
./2009_05_game
./2009_05_game/2009_05.log
find . -name "*2009*" -prune
./check/check_list_2009_05.php
./check/check_list_2009_06.php
./2009_03_MSIE8
./2009_05_apache
./2009_05_game

./2009_05_game/ 디렉토리 이하에 2009_05.log 파일이 있지만, -prune옵션으로 해당 디렉토리 이하는 찾지 않았다.

[예제 2] ./foo/bar 디렉토리는 제외하고, *.txt 파일을 찾아라.

find . ! \( -path './foo/bar' -prune \) -name "*.txt"
find . ! \( -type d -path './foo/bar' -prune \) -name "*.txt" (보다 정확한 표현)

[예제 3] ./foo/bar 디렉토리와 ./coffeenix/temp 디렉토리는 제외하고, *.bak 파일을 찾아라.

find . ! \( \( -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak"
find . ! \( \( -type d -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak" (보다 정확한 표현)

[예제 4] ./2008로 시작하는 디렉토리는 제외하고, .*.bak 파일을 찾아라.

find . ! \( -path './2008*' -prune \) -name "*.bak"
find . ! \( -type d -path './2008*' -prune \) -name "*.bak" (보다 정확한 표현)

-path 대신 -wholename 옵션을 사용해도 된다.

 
-path pattern
      See -wholename.   The predicate -path is also supported by HP-UX find.

-wholename pattern
      File name matches shell pattern pattern.  The metacharacters do not treat `/' or `.' specially; so, for example,
                find . -wholename './sr*sc'
      will  print  an entry for a directory called './src/misc' (if one exists).  To ignore a whole directory tree, use -prune rather
      than checking every file in the tree.  For example, to skip the directory `src/emacs' and all files and directories  under  it,
      and print the names of the other files found, do something like this:
                find . -wholename './src/emacs' -prune -o -print
 



2. 참고자료

* find manpage
  http://unixhelp.ed.ac.uk/CGI/man-cgi?find

* 유용한 find 명령어 예 모음 (2003, 글 좋은진호)
  http://coffeenix.net/board_view.php?bd_code=36

DNS 관련 포트 설정시 TCP 53번, UDP 53번을 허용해야 한다.
(다시 말해 네임서버 소프트웨어는 TCP도 지원을 할 필요가 있다)

[RFC1123 - 6.1.3.2]
DNS resolvers and recursive servers MUST support UDP, and SHOULD
support TCP, for sending (non-zone-transfer) queries.
https://tools.ietf.org/html/rfc1123#section-6.1.3.2

의무 사항은 아니나 권장이 되는 사항이다.

일반적인 DNS 질의는 UDP를 통해 이루어진다.
DNS 질의과정이 TCP를 쓰는 경우는 다음과 같다.

1. Zone-Transfer(AXFR/IXFR)

Master-Slave 구성시 Zone Transfer가 이루어지는데, 이때는 TCP를 사용하여 Zone File을 주고받는다.
전체 복사인 AXFR, 증분 복사인 IXFR 모두 TCP를 사용한다.

(BIND9 Zone-Transfer 로그)

2. 메시지가 512byte를 초과하는 경우

DNS 메시지에는 UDP 사용시 512byte 제한이 있다.

일반적인 DNS 메시지가 512byte를 초과하는 경우는 거의 없으나,
DNSSEC, IPv6 등에서 512byte를 초과하는 일이 종종 발생한다.

특히, NSEC3 레코드 등은 거의 필수적으로 512byte를 초과한다.


서버에서 주려는 응답이 512byte를 초과하는 경우,
TC Flag를 이용하여 DNS 질의자와 응답자는 TCP를 통해 질의 응답을 진행하게 된다.

(NSEC3 레코드는 사실상 512바이트를 초과할 수 밖에 없다)

요즘은 EDNS0 메커니즘에 의해,
EDNS0을 지원하는 조합이라면 512byte 이상의 UDP 메시지를 보낼 수 있다.
(권장되는 EDNS Payload는 512~4096byte이다)

하지만, 모든 클라이언트가 EDNS0을 지원하는 것은 아니며,
일부 오래된 방화벽이나 네트워크 정책 등에 의하여 512byte가 넘는 UDP 질의응답이 차단될 수도 있다.

[출처] https://dev.dwer.kr/2020/03/dns-tcp.html

EPEL 활성화 : yum install epel-release
관련 패키지 : yum install ntfs-3g ntfsprogs

리눅스 NTFS 포맷

mkntfs -f -L [사용할 볼륨 레이블 명] -v 장치명
ex) mkntfs -f -L BackupFile -v /dev/sdb1

-f : 빠른 포맷(= --fast) 동일한 기능 옵션으로 -Q(= --quick)를 사용 할 수 있음
-L : 볼륨 레이블명 설정(= --label)
-v : 자세한작업 수행 정보 출력(= --verbose)

리눅스 NTFS 마운트

mount -t ntfs-3g /dev/sdb1 /backup -o force,locale=ko_KR.euckr (시스템 로케일 설정과는 무관)
-o force,locale=ko_KR.euckr 옵션 미 적용 시 한글 인식이 안되어 한글 폴더, 파일 생성이 불가능하다.

리눅스 서버는 /etc/machine-id 라는 파일이 있다. 해당 파일은 machine의 고유 아이디값을 랜덤하게 생성하여 저장된 것으로 32글자로 된 16바이트/128비트 의 UUID값이다.

 machine-id는 dbus 또는 systemd 동작에 관련되어 있으며 /etc/machine-id 는 기본적으로 /var/lib/dbus/machine-id 에 심볼릭 링크되어있는 경우도 있다.

일단 해당 파일이 없는경우 어떤 문제가 일어나는지 알아보자

[    2.680252] systemd[1]: Inserted module 'ip_tables'
[    3.751916] systemd-journald[665]: Failed to get machine id: No such file or directory
[    3.755044] systemd-journald[677]: Failed to get machine id: No such file or directory
[    3.757980] systemd-journald[678]: Failed to get machine id: No such file or directory
[    3.760862] systemd-journald[679]: Failed to get machine id: No such file or directory
[    3.763454] systemd-journald[680]: Failed to get machine id: No such file or directory
[    4.023763] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:26] Failed to replace specifiers: /run/log/journal/%m
[    4.023804] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:28] Failed to replace specifiers: /run/log/journal/%m
[    4.023838] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:29] Failed to replace specifiers: /run/log/journal/%m
[    4.023873] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:32] Failed to replace specifiers: /var/log/journal/%m
[    4.023910] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:33] Failed to replace specifiers: /var/log/journal/%m/system.journal
[    4.031224] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:37] Failed to replace specifiers: /var/log/journal/%m
[    4.031259] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:38] Failed to replace specifiers: /var/log/journal/%m
[    4.031292] systemd-tmpfiles[676]: [/usr/lib/tmpfiles.d/systemd.conf:39] Failed to replace specifiers: /var/log/journal/%m/system.journal

시스템의 dmesg내용을 보면 위와같은 항목이 나타나게 된다. 이것은 systemd가 부팅시 machine-id 를 읽어 관련 동작을 초기화하는데 있어 machine-id값이 없어서 나는 오류메시지 이다.
파일이 없으면 자동으로 생성하면 되는게 아닌가 싶은데 일단 파일이 없는경우 자동생성되지 않고 위와같이 오류메세지가 나타난다.

또한 이 오류로 인해 systemd 관련 로그가 생성되지 않는다. 즉 대부분의 /var/log/에 쌓이는 로그들이 정상적으로 기록되지 않는다.

해결법

위 증세를 해결하기 위해서는 반드시 /etc/machine-id라는 파일이 존재하여야 한다.
두가지 방법이 있는데 아래를 참조하면 된다.

  • systemd-machine-id-setup 이용하는 방법
rm -f /etc/machine-id /var/lib/dbus/machine-id
systemd-machine-id-setup
  • dbus-uuidgen 사용법
rm -f /etc/machine-id /var/lib/dbus/machine-id
dbus-uuidgen --ensure=/etc/machine-id
dbus-uuidgen --ensure

시스템 재부팅 할 것~!

출처 : https://atl.kr/dokuwiki/doku.php/machine-id

  • 리눅스 history 날짜/시간 적용 방법

history에 날짜/시간을 적용하는 방법 자체도 매우 쉽고, 사용 하다보면 history에 날짜/시간이 적용되지 않아 history를 추적하기 힘든 상황이 발생할 수 있기 때문에 되도록 history에는 날짜와 시간을 적용하여 사용하는것이 좋습니다.

아래와 같이 /etc/profile 파일을 vi 편집기로 열은 후 맨 마지막 줄에 HISTTIMEFORMAT="[%Y-%m-%d_%H:%M:%S]  " 를 넣어주면 끝 입니다.

vi /etc/profile

# 맨 마지막 줄로 이동하여 아래 내용 기입
HISTTIMEFORMAT="[%Y-%m-%d_%H:%M:%S]  "
:wq

또는 아래와 같이 한줄로 간단하게 적용할 수 있습니다.

echo "HISTTIMEFORMAT=\"[%Y-%m-%d_%H:%M:%S]  \"" >> /etc/profile

적용 후 원격터미널을 로그아웃 후 재접속한 뒤 history 명령을 실행하면 입력했던 명령어 앞에 날짜와 시간이 나오는 것을
확인할 수 있다.

출처 : https://nirsa.tistory.com/234

리눅스 sendmail "unable to qualify my own domain name (YOUTHOSTNAME) unknown; sleeping for retry" 발생 시

보통 서버의 호스트네임을 localhost 말고 다른걸로 변경하여 사용할 때 발생 하는데, 서비스 시작이 굉장히 느리게 되거나 안되는 경우가 안되기도 합니다.

"unable to qualify my own domain name (YOUTHOSTNAME) unknown; sleeping for retry" 에러가 발생하면 hosts 파일에 127.0.0.1으로 서버의 호스트 네임을 작성 해주시면 됩니다.

hostname이 antamis 일 경우

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  antamis
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 

출처 : https://nirsa.tistory.com/315

PHP 에서 날짜를 다루는데는 주로 date(), strtotime(), mktime() 의 세가지 함수를 사용 합니다. 각각의 사용법과 몇가지 응용에 대해서 알아보도록 하겠습니다.

1. date() 함수.

string date ( string $format [, int $timestamp ] )

정수형으로 주어지는 timestamp나, timestamp가 주어지지 않았을 경우에는 현재 로컬 시간을 사용하여, 주어진 포맷 문자열에 따라 형식화한 문자열을 반환합니다. 즉 timestamp는 선택적이고, 기본값은 time()의 값입니다. 지원되지 않는 포맷 문자는 그대로 출력됩니다.

<?php
$dateString = date("Y-m-d", time());
echo $dateString;
?>

결과)
2017-01-10

2. strtotime() 함수.

int strtotime ( string $time [, int $now = time() ] )

주어진 날짜 형식의 문자열을 1970년 1월 1일 0시 부서 시작하는 유닉스 타임스탬프로 변환합니다. 두번째 인자가 주어지면 주어진 타임스탬프를 기준으로 계산되어 집니다. 날짜가 주어지지 않고 변화량만 주어지면 로컬 타임이 사용됩니다.  +1 day, +1 week 등이 사용될 수 있고, 음수값도 사용됩니다.

<?php
$timestamp = strtotime("+1 week");
echo date("Y-m-d", $timestamp), "<br/>";

$timestamp = strtotime("2016-12-01 +1 week");
echo date("Y-m-d", $timestamp), "<br/>";
?>

결과)
2017-01-17
2016-12-08

3. mktime() 함수.

int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

인자로 주어진 값(시,분,초,월,일,년)에 대응하는 타임스탬프를 반환합니다.

<?php
$timestamp = mktime(0, 0, 0, 1, 1, 2017);
echo date('Y-m-d', $timestamp);
?>

결과)
2017-01-01

4. 사용 예제 입니다.

- 특정월의 마지막 날짜를 구하는 방법입니다.

방법은 date함수의 포맷문자열 't'를 사용합니다. 't'는 주어진 월의 일수를 구하는 형식 문자 입니다.

$lastDay = date('t', strtotime("2017-01-01"));

타임스탬프는 mktime 으로 구할수도 있습니다.

$lastDay = date('t', mktime(0, 0, 0, 1, 1, 2017));

mktime함수의 인자는 순서대로 시간, 분, 초, 월, 일, 년도 입니다.

- 특정 날짜의 요일을 구하는 방법 입니다.

$day = "2017-01-10";

date 함수의 'w' 포맷 문자는 0부터 6까지의 숫자값을 반환합니다. 순서대로 일~토 를 나타냅니다.

$weekString = array("일", "월", "화", "수", "목", "금", "토");
echo($weekString[date('w', strtotime($day))]);

- 하루전 날짜를 구하는 방법 입니다.

$day = "2017-01-10"; 의 하루전 날짜인 "2017-01-09" 를 문자열로 구하려고 합니다.

$beforeDay = date("Y-m-d", strtotime($day." -1 day"));

날짜 뒤에 "+1 day", "+1 month", "+1 year", "+1 week" 등의 문자열을 붙여서 날짜를 계산할 수 있습니다.

5. date 함수에서 사용할 수있는  포맷문자열 입니다.

--- 일 ---
d  :  일, 앞에 0이 붙는 2 숫자  [ 01에서 31 ]
D  :  요일 글자 표현, 3 문자 [ Mon에서 Sun ]
j  :  앞에 0이 붙지 않는 일 [ 1에서 31 ]
l  :  (소문자 'L') 요일의 완전한 글자 표현 [ Sunday에서 Saturday ]
N  :  요일의 ISO-8601 숫자 표현 (PHP 5.1.0에서 추가) [ 1(월요일)에서 7(일요일) ]
S  :  일 영어 접미사, 2 문자 [ st, nd, rd, th. j와 같이 사용하기 좋음. ]
w  :  요일 숫자 표현 [ 0(일요일)에서 6(토요일) ]
z  :  해당 연도 일차 [ (0에서 시작) 0에서 365 ]

--- 주 ---
W  :  ISO-8601 주차, 주는 월요일에 시작 (PHP 4.1.0에서 추가) [ 예시: 42 (그 해의 42번째 주) ]

---월 ---
F  :  January나 March 같은 월의 완전한 글자 표현 [ January에서 December ]
m  :  0이 붙는 월 숫자 표현 [ 01에서 12 ]
M  :  월의 축약 글자 표현, 3 문자 [ Jan에서 Dec ]
n  :  0이 붙지 않는 월 숫자 표현 [ 1에서 12 ]
t  :  주어진 월의 일 수 [ 28에서 31 ]

--- 연 ---
L  :  윤년 여부 [ 윤년엔 1, 그 외엔 0 ]
o  :  ISO-8601 연도. Y와 같지만, ISO 주차(W)가 전해나 다음해에 해당하면, 그 연도를 사용합니다. (PHP 5.1.0에서 추가) [ 예시: 1999나 2003 ]
Y  :  연도의 완전한 숫자 표현, 4 숫자 [ 예시: 1999나 2003 ]
y  :  도의 두 숫자 표현 [ 예시: 99나 03 ]

--- 시간 ---
a  :  오전과 오후의 소문자 [ am 또는 pm ]
A  :  오전과 오후의 대문자 [ AM 또는 PM ]
B  :  스와치 인터넷 시간 [ 000에서 999 ]
g  :  0이 붙지 않는 12시간 형식 시 [ 1에서 12 ]
G  :  0이 붙지 않는 24시간 형식 시 [ 0에서 23 ]
h  :  0이 붙는 12시간 형식 시 [ 01에서 12 ]
H  :  0이 붙는 24시간 형식 시 [ 00에서 23 ]
i  :  0이 붙는 분 [ 00에서 59 ]
s  :  초, 0이 붙음 [ 00에서 59 ]
u  :  마이크로초 (PHP 5.2.2에서 추가) [ 예시: 54321 ]

--- 시간대 ---
e  :  시간대 식별자 (PHP 5.1.0에서 추가) [ 예시: UTC, GMT, Atlantic/Azores ]
I  :  (대문자 i) 일광 절약 시간 여부  [ 일광 절약 시간이면 1, 아니면 0 ]
O  :  그리니치 시간(GMT)과 시차 [ 예시: +0200 ]
P  :  시와 분 사이에 콜론이 들어가는 그리니치 시간(GMT)과 차이 [ 예시: +02:00 ]
T  :  시간대 축약어 [ 예시: EST, MDT ... ]
Z  :  시간대 오프셋 초. UTC 서쪽은 항상 음수, UTC 동쪽은 항상 양수 [ -43200에서 50400 ]

--- 날짜/시간 표현 ---
c  :  ISO 8601 날짜 (PHP 5에서 추가) [ 2004-02-12T15:19:21+00:00 ]
r  :  ≫ RFC 2822 형식 날짜 [ 예시: Thu, 21 Dec 2000 16:01:07 +0200 ]
U  :  유닉스 에포치(January 1 1970 00:00:00 GMT)부터 초수 [ time() 참조 ]

 

출처: https://offbyone.tistory.com/38 [쉬고 싶은 개발자:티스토리]

게시판에 글을 작성할 때 본문 내용이 정상적으로 다 올라가지 않고 뒷부분이 잘리는 경우가 있습니다.

- 웹페이지에서 글을 복사해서 그대로 붙여 넣을 경우

- 한글이나 워드 프로그램에서 작성한 문서 내용을 복사해서 그대로 붙여 넣을 경우

특히 위와 같은 경우 글을 붙여 넣고 에디터 하단 탭에서 HTML 소스 보기를 해보면 다량의 태그 코드가 추가돼있는 걸 확인할 수가 있는데 그래서 데이터 저장 허용 크기를 넘어선 부분들은 전부 누락되는 것이죠.

 

1. 게시판 필드 타입 변경

그누보드는 게시판 내용 값이 저장되는 wr_content 필드 타입이 TEXT로 되어 있습니다.

해당 필드 타입을 TEXT에서 MEDIUMTEXT 또는 LONGTEXT로 변경합니다.

phpMyAdmin 을 이용하면 쉽게 변경할 수 있습니다.

웹호스팅을 이용 중이라면 내 호스팅 관리 메뉴 등에 phpMyAdmin 접속 링크가 대부분 있을 겁니다.

좌측 DB 테이블에서 원하는 게시판 선택 후 wr_content 필드 수정 버튼 클릭

g5_write_1111 이런 형태로 되어 있는 게 게시판 테이블이고 끝부분 1111 이 게시판 id 입니다.

수정 화면에서 필드 종류를 TEXT 에서 MEDIUMTEXT 또는 LONGTEXT 로 변경

phpMyAdmin 을 사용하기 곤란한 상황이거나 위와 같이 적용했는데 에러가 뜬다면 이렇게 하세요.

해당 게시판에서 사용하고 있는 게시판 스킨 write.skin.php 파일 상단 

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

위 코드 바로 밑에 다음 코드를 추가합니다.

MEDIUMTEXT 로 변경하려면 이렇게..

sql_query(" ALTER TABLE `{$write_table}` CHANGE `wr_content` `wr_content` MEDIUMTEXT NOT NULL ");

LONGTEXT 로 변경하려면 이렇게..

sql_query(" ALTER TABLE `{$write_table}` CHANGE `wr_content` `wr_content` LONGTEXT NOT NULL ");

MEDIUMTEXT 또는 LONGTEXT 둘 중 하나만 선택해서 적용하세요.

write.skin.php 파일에 위 코드를 추가하고 게시판 클릭 후 글쓰기 화면을 한 번 띄워주면 자동으로 변환됩니다.

다른 게시판도 바꾸고 싶으면 변환하고자 하는 게시판을 클릭 후 마찬가지로 글쓰기 화면을 띄워주면 됩니다.

해당 게시판에서 사용되고 있는 스킨 파일에 적용한 게 맞는지 정확히 확인하세요.

요즘은 반응형 테마까지 나와서 다른 스킨 파일에 잘못 적용하는 분들이 의외로 많이 계십니다.

적용 후 해결이 되면 추가했던 위 코드는 반드시 다시 삭제하세요.

2. bbs/write_update.php 파일 수정

if (isset($_POST['wr_content'])) {
    $wr_content = substr(trim($_POST['wr_content']),0,65536);
    $wr_content = preg_replace("#[\\\]+$#", "", $wr_content);
}


 여기서 이 부분 숫자를 아래 참고사항에 있는 최대 저장 크기 값 참고해서 적당히 늘려주거나

$wr_content = substr(trim($_POST['wr_content']),0,16777216);

 아니면 이렇게 없애버립니다.

$wr_content = trim($_POST['wr_content']);

 

* 참고사항 (데이터 타입별 최대 저장 크기)

TEXT : 65535
MEDIUMTEXT : 16777215
LONGTEXT : 4294967295

3. lib/editor.lib.php 파일 수정

아래 함수를 찾은 후 maxlength=\"65536\" 이 부분 최대 저장 크기를 2번 내용처럼 적당히 변경하거나 삭제

function editor_html($id, $content)
{
    return "<textarea id=\"$id\" name=\"$id\" style=\"width:100%;\" maxlength=\"65536\">$content</textarea>";

}

 

출처 : https://gnustudy.com/bbs/board.php?bo_table=gnu_tip&wr_id=24