Press "Enter" to skip to content

[글쓴이:] 용준 이

리눅스 텍스트파일 한글깨짐 고쳐보기

오래된 프로그램 소스나 텍스트 파일에서 한글깨진 파일이 있을 경우가 있다.

일단 예전 파일이 요즘쓰는 utf-8로 변환되어 있지 않아서 나타나는 현상이 대부분이다.

현재 리눅스 시스템이 어떤 인코딩 타입을 사용하고 있는지 알아보자

# locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

UTF-8을 사용하고 있군요.

다음. 한글이 깨지는 파일의 인코딩 형태를 파악해 보자.

# file -bi test.txt
text/plain; charset=utf-8

이 파일은 텍스트 파일인데 utf-8로 저장되어 있다는 소리다. 리눅스 시스템도 UTF8이니깐 이 파일은 잘 보일거다.

리눅스 시스템이 UTF-8인데 파일은 euc-kr 이라면 깨져 보일 것이다.

리눅스 시스템이 EUC-KR인데 파일이 UTF-8이라면 역시 깨져 보일 것이다.

파일 인코딩을 euc-kr 에서 utf-8로 변환하여 저장하는 방법

# iconv -c -f euc-kr -t utf-8 org.txt > new_utf8.txt

[PHP] mysql update 된 row 수 체크하기

<?php
$mysql = new mysqli("localhost","username","password","use_db");

if($mysql->connect_errno)
{
  echo "MySQL 접속 실패 : ".$mysql->connect_error;
  exit();
}

// 업데이트 처리
$mysql->query("UPDATE usertable SET name = 'myName' where id = 100");
echo "적용된 row 수: ".$mysql->affected_rows;

$mysqli->close();
?>

SELECT 일때도 동일하게 사용할 수 있습니다.

다만, query() 의 리턴 변수에서 체크하는 것이 아니라 mysqli 인스턴스로 체크합니다.

php 프로그램에서 콘솔로 출력되는 데이터를 파일로 기록하기

php 프로그램을 하면 echo, print, print_r 등 콘솔로 출력을 하는 경우가 많다.

배치로 돌릴 경우에는 날라가 버리는데 cron등에 아래와 같이 등록하면 로그로 남길 수가 있다.

그것도 날짜별로.

주의할점은 실행할 스크립트가 있는 디렉토리 아래에 txt라는 서브디렉토리가 있어야 한다.

cd /script/directory
# 오늘날짜
today=$(date "+%Y%m%d")
# 로그파일명 저장. 상대경로로 했는데... 안되면 절대경로로 바꿔주세요
logfile=./txt/${today}gen.log
# 스크립트 실행
sudo sh -c "php my_script.php" >> ${logfile}
# 날짜 로그파일 넣는 다른 방법
sudo php script_name.php >> ./txt/$(date +\%Y\%m\%d)_log.txt &