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

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

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

특히 위와 같은 경우 글을 붙여 넣고 에디터 하단 탭에서 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

서버에서 파일명이 깨지는 경우 인코딩 변경으로 문제를 해결할 수 있는 명령어이다.
이종간의 OS (예 : 윈도우와 MAC) 에서 주로 발생하는데
윈도우는 EUC-KR이 기본 인코딩이고 MAC은 UTF-8이 기본 인코딩이라 MAC에서 FTP등을 통해 한글파일이나 폴더를
업로드할 경우 인코딩이 깨진채로 업로드된다.
이런 경우 convmv라는 유용한 명령어가 있는데 명령어가 없다면 아래 명령어로 설치한다.
(CentOS 또는 RockyLinux) yum install convmv

폴더로 들어가서 처리를 할 경우 아래와 같이 명령어를 선택하면 해당 폴더에 있는 euc-kr 인코딩이 utf-8 인코딩 방식으로 바뀐다.

[EUC-KR → UTF-8]

convmv -f euc-kr -t utf-8 ./*.* --notest

[UTF-8 → EUC-KR]

convmv -f utf-8 -t euc-kr ./*.* --notest

여기서 --notest 를 입력하지 않을 경우 인코딩 방식은 바뀌지 않고,  어떻게 변경되는지만 확인할 수 있다.

참고로 현재 위치에서 하위 디렉토리까지 포함하여 인코딩 방식을 변경하기 위해서는 -r 옵션을 추가하면 된다.

convmv -f euc-kr -t utf-8 ./*.* -r --notest

특정파일 1개만 변경할 때는 아래와 같이 처리한다.

convmv --notest --replace -r -f euc-kr -t utf-8 FileName

--replace 옵션은 동일한 파일명으로 덮어쓰기 하고 싶을 때 추가

자바스크립트로 form 태그의 input 검증(validation) 후에 수동으로 submit 처리하기
 
기본적으로 <form>태그를 사용하여 입력한 데이터를 웹서버로 전송할때 <input>태그의 type="submit"을 통해 전송버튼을 만들어 사용합니다.
input submit의 경우 form 안에 있는 모든 inputvalue를 전송하게 되는데, 이경우 각 input에 값이 입력되었는지 등의 여부를 검증(validation)할 수 없습니다.
따라서 이 경우 <input type="button">으로 버튼을 하나 만들고 onClick이벤트를 직접 핸들링하여, 버튼을 클릭했을 때 각 입력값을 검증한 후 수동으로 submit처리 해주어야 합니다.
 
예제
다음은 form의 입력값을 검증하고 수동으로 submit 처리하는 예제입니다. git링크
 

javascriptStudy/javascriptStudy/formValidation.html at master · dololak/javascriptStudy

Contribute to dololak/javascriptStudy development by creating an account on GitHub.

github.com

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
    <title>로그인</title>
    <script type="text/javascript">
        function login(){
            var loginForm = document.loginForm;
            var userId = loginForm.userId.value;
            var password = loginForm.password.value;
            
            if(!userId || !password){
                alert("아이디와 비밀번호를 모두 입력해주세요.")
            }else{
                loginForm.submit();
            }
        }
    </script>
</head>
<body>
    <form name="loginForm" action="http://localhost/login"  method="post">
            계정 : <input type="text" name="userId"><br>
            비밀번호 : <input type="password" name="password"><br>
            <input type="hidden" name="loginType" value="admin">
            <input type="button" onclick="login()" value="로그인">
    </form>
</body>
</html>

form 태그의 로그인 button에 onClick 이벤트의 핸들러로 login() 함수를 연결해두었습니다. 로그인 버튼을 클릭하게 되면 <script>태그에 선언되어있는 login()함수가 핸들러로 호출됩니다.

<input type="button" onclick="login()" value="로그인">

핸들러로 사용한 login()함수입니다. document 객체를 이용해 loginForm을 조작합니다. DOM을 이용하면 name 속성을 통해 쉽게 접근할 수 있습니다. 
javascript에서는 값이 0, undefined, null, 공백인 경우 false로 처리하는 특성이 있기때문에 not을 의미하는 !연산자를 이용하여 입력 여부를 판단하였습니다.

function login(){
    var loginForm = document.loginForm;
    var userId = loginForm.userId.value;
    var password = loginForm.password.value;
    
    if(!userId || !password){
        alert("아이디와 비밀번호를 모두 입력해주세요.")
    }else{
        loginForm.submit();
    }
}

값이 하나라도 입력되지 않은 경우 alert()를 이용해 경고를 띄우고 모두 입력된 경우 form 객체의 submit()메서드를 실행합니다. 
submit()메서드는 이미 브라우저에 정의되어 있는 메서드로 실제 input type="submit"이 클릭 되었을 때 실행되는 메서드입니다.

테스트
값을 하나라도 입력하지 않고 로그인 버튼을 클릭하면 경고창이 나타납니다.

모두 입력한 경우에는 경고창이 나타나지 않고 submit()이 실행되고 action 속성에 정의된 경로로 HTTP 요청을 수행합니다.

예제이므로 웹서버가 준비되어 있지 않아 이후 내용은 별다른게 없습니다.

HTTP 요청 메시지를 분석해보면 입력한 내용들이 잘 전송된것을 볼 수 있습니다. 여기서 눈여겨 볼 점은 input type="hidden"으로 선언되어 있던 input의 value값 또한 전송이 된다는 점 입니다.

POST http://localhost/login HTTP/1.1
Host: localhost
Proxy-Connection: keep-alive
Content-Length: 44
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like  Gecko) Chrome/75.0.3770.142 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
 
userId=dololak&password=1234&loginType=admin

 

출처 : https://dololak.tistory.com/728

'Programming > PHP' 카테고리의 다른 글

PHP 날짜 함수 사용하기 - date, strtotime, mktime  (1) 2024.06.14
D-Day 계산기  (0) 2016.05.25

터미널에서 인터넷 속도 측정이 하고 싶어서 조사해본 내용 정리.

설치

https://www.speedtest.net/ko/apps/cli

sudo apt-get install speedtest로 설치하면 서버 목록이 10개밖에 안 되는 비공식 버전을 받게 된다. 그러므로 다음과 같이 설치하자.

혹시 이미 비공식 버전을 설치했다면, 위 공식사이트 링크의 주석을 따라 삭제하는 절차를 밟도록 하자.

[맥OS]

brew tap teamookla/speedtest
brew update
brew install speedtest --force

[리눅스 데비안(우분투) 계열]

curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt-get install speedtest

[리눅스 레드햇 계열]

curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.rpm.sh | sudo bash
sudo yum install speedtest

실행 방법은 간단하다. 실행하고 yes를 입력해 라이센스에 동의한다.

speedtest

결과

   Speedtest by Ookla

      Server: Ookla - Seoul (id: 5249)
         ISP: Lg Powercomm
Idle Latency:    10.36 ms   (jitter: 0.64ms, low: 9.57ms, high: 11.03ms)
    Download:   876.93 Mbps (data used: 797.8 MB)                                                   
                 77.18 ms   (jitter: 7.83ms, low: 8.93ms, high: 133.85ms)
      Upload:   866.89 Mbps (data used: 725.8 MB)                                                   
                  8.80 ms   (jitter: 0.54ms, low: 7.42ms, high: 10.87ms)
 Packet Loss:     0.0%
  Result URL: https://www.speedtest.net/result/c/c0c219c5-eeea-471d-8f99-188844c7a165

출처 : https://velog.io/@jay6768/%ED%84%B0%EB%AF%B8%EB%84%90%EC%97%90%EC%84%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%86%8D%EB%8F%84-%EC%B8%A1%EC%A0%95-speedtest-cli

ls -l 출력 시 날짜 변경( 12월  2009 -> 2009-07-01 08:35 )

변경 전

[root@wooseob ~]# ls -l
-rw------- 1 root root  1104 12월 17 03:22 anaconda-ks.cfg
-rw-r--r-- 1 root root 25690 12월 17 03:22 install.log
-rw-r--r-- 1 root root  4508 12월 17 03:21 install.log.syslog

# alias ls='ls --color=auto --time-style=long-iso'          날짜표시 변경하는 명령어

변경 후

[root@wooseob ~]# ls -l
-rw------- 1 root root  1104 2012-12-17 03:22 anaconda-ks.cfg
-rw-r--r-- 1 root root 25690 2012-12-17 03:22 install.log
-rw-r--r-- 1 root root  4508 2012-12-17 03:21 install.log.syslog

 

개인 사용자(~/.bashrc 기재)

[root@wooseob ~]# vi ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color=auto --time-style=long-iso'       -  추가 입력

전체 사용자 적용 시

[root@wooseob ~]# vi /etc/bashrc
# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

alias ls='ls --color=auto --time-style=long-iso'        -  추가 입력

출처 : https://faq.hostway.co.kr/Linux_ETC/4495