티스토리 뷰
반응형
서버 자동감지로 접속되는데 접속하고 나면 한글이 깨지는현상
euc-kr로 저장된 파일인데 utf-8로 저장된 파일은 ftp상에 업로드 되면 깨져보이고 들쑥날쑥 정신없을때 좋은 코드
아래 코드를 만들어서 저장되어있는 파일 상태를 체크해보고
<?php
$directory = '/web/home/xxxxxxxx/html/home/down/'; // 서버의 파일 경로
$baseUrl = 'https://xxxxxxxx.kr/home/down/'; // URL 기본 경로
$logFile = $directory . 'log/log.txt'; // 로그 파일 경로
// 로그 파일 초기화
if (!file_exists(dirname($logFile))) {
mkdir(dirname($logFile), 0755, true); // 로그 디렉토리가 없으면 생성
}
file_put_contents($logFile, "변환된 파일 목록:\n"); // 로그 파일 초기화
// 디렉토리 열기
if ($handle = opendir($directory)) {
echo "파일 URL 목록:<br>\n"; // HTML 줄 바꿈을 위해 <br> 사용
// 디렉토리 내 파일 반복
while (false !== ($file = readdir($handle))) {
$filePath = $directory . $file;
$convertedFileName = '';
// PDF 또는 MP3 파일인지 확인
if (is_file($filePath) && (pathinfo($filePath, PATHINFO_EXTENSION) === 'pdf' || pathinfo($filePath, PATHINFO_EXTENSION) === 'mp3')) {
// 파일 이름의 URL 인코딩 처리
$encodedFileName = rawurlencode($file); // URL에 적합한 형식으로 인코딩
// URL 생성
$fileUrl = $baseUrl . $encodedFileName;
// 파일 이름의 언어셋 감지
$encoding = mb_detect_encoding($file, ["UTF-8", "EUC-KR", "ISO-8859-1", "SJIS", "Windows-1251", "Windows-1252", "ISO-8859-2"], true);
// 인코딩을 감지하지 못한 경우 기본값 설정
if ($encoding === false) {
$encoding = "알 수 없음";
} else {
// EUC-KR로 인코딩된 파일 이름을 UTF-8로 변환
if ($encoding === "EUC-KR") {
$convertedFileName = iconv("EUC-KR", "UTF-8//IGNORE", $file);
$fileUrl = $baseUrl . rawurlencode($convertedFileName); // 변환된 파일 이름으로 URL 다시 생성
file_put_contents($logFile, "$convertedFileName\n", FILE_APPEND);
// 새 파일로 저장하는 코드 (주석 처리)
// $newFilePath = $directory . $convertedFileName;
// rename($filePath, $newFilePath); // 파일 이름 변경
}
}
// 파일의 마지막 수정 시간 가져오기
$lastModifiedTime = date("Y-m-d H:i:s", filemtime($filePath));
// HTML 링크 출력, 언어셋과 수정 시간을 함께 표시
echo "<a href=\"$fileUrl\">$file</a> <span style=\"color: gray;\">($encoding, 수정 시간: $lastModifiedTime)</span><br>\n";
// 변환된 파일 이름을 붉은색으로 출력
if (isset($convertedFileName) && $convertedFileName) {
echo "<span style=\"color: red;\">변환된 파일 이름: $convertedFileName</span><br>\n";
}
}
}
// 디렉토리 핸들 닫기
closedir($handle);
} else {
echo "디렉토리를 열 수 없습니다.";
}
?>
서버에서 언어셋 안바꿔주면 .htacess 로 임시로 바꿔서 써야한다.
AddDefaultCharset UTF-8
그래서 해당되는 가장 상단 폴더에 위치시켜놓고
조금 지나서 캐쉬좀 새로고쳐주다보면 utf-8로 고정되어있을거다.
알드라이브나 파일질라로 접속할때 언어셋 uft-8로 해당 서버 고정시켜놓으면 편함.
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 워드프레스
- 아미나
- 텔레그램
- 그누보드5
- Cloudflare
- Fullcalendar
- Apache
- SSL
- 파이썬
- 그누보드
- .htaccess
- 에러
- 제로보드
- python
- 셀레니움
- 유튜브
- 아파치
- php
- 회원가입
- 파이선
- php8
- 클라우드플레어
- 오토셋
- 멀티계정
- 윈도우
- lsposed
- xe
- 텔레그램봇
- Magisk
- 루팅
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함