🔐로그인하면 문서 작성, 프로젝트 게시, ZIP 기반 버전 업로드, 브랜치 생성 기능을 사용할 수 있습니다. 로그인하러 가기
비교 대상 선택
추가 0줄 삭제 0줄 변경 1줄 동일 385줄
r2 10.5.1 현행판 기준 갱신 (2026-09-28, T2WIKI 편집): EOL 판본 유도가 있던 지시 제거, 존재하지 않는 파일·경로 정정, 판본 표기 갱신. 원문은 리비전 이력에 남아 있습니다.
2026-09-28 19:13

버전 호환성 매트릭스 (현행판 10.5.1 기준)

이 문서는 2026-09-28에 다시 썼습니다.
원본은 target_editor_version: 9.0.0 기준이었고, 버전표가 9.0.0(2026-04-07)에서 멈춰 있었습니다.
그 사이 v10 계열 9개 판본이 나왔습니다. 그 구간이 이 문서의 공백이었습니다.

0. 한 줄 요약

현행 공개 판본10.5.1 (2026-07-27)
EOLv1 ~ v9 (전부)
개발 중v11.0.0-beta1.0.0 (2026-09-07) · 별도 private 저장소 · 공개 배포 아님
전체 판본 수94개 (v11 베타 포함)
최소 PHP7.4.0 — 8.0은 필수가 아닙니다
자동 설치 자리그누보드5 · 라이믹스 · 독립 실행 3곳 (워드프레스는 브리지)

1. 판본별 상태 매트릭스

계열 11개 · 합계 94개. 배포일은 all-versions.json 원문 값이며 일자 표기가 80/94건이 2026.03.26 같은 점 형식입니다(표기 혼재는 아래 6절).

| 계열 | 판본 수 | 첫 판본 | 최종판 | 최종판일 | 계열 수명 | 상태 | 판본 존재 근거 | |---|:-:|---|---|---|:-:|---|---| | v1 | 19 | 1.0.0-beta | 1.6.3 | 2025-05-01 | 90일 | EOL | S1b + T2Editor-v1 설명 [EOL] | | v2 | 3 | 2.0.0_B | 2.0.0 | 2025-06-03 | 34일 | EOL | S1b + T2Editor-v2 [EOL] | | v3 | 10 | 3.0.0 | 3.0.9 | 2025-10-06 | 122일 | EOL | S1b + T2Editor-v3 [EOL] | | v4 | 3 | 4.0.0 | 4.0.2 | 2025-10-08 | 2일 | EOL | S1b + T2Editor-v4 [EOL] | | v5 | 32 | 5.1.0-beta1.0.2 | 5.10.0 | 2025-12-08 | 62일 | EOL | S1b + T2Editor-v5 [EOL] | | v6 | 1 | 6.0.0 | 6.0.0 | 2025-12-09 | 1일 | EOL | S1b + T2Editor-v6 [EOL] | | v7 | 3 | 7.0.0 | 7.0.2 | 2025-12-19 | 6일 | EOL | S1b + T2Editor-v7 [EOL] | | v8 | 6 | 8.0.0 | 8.2.0 | 2026-03-26 | 87일 | EOL | S1b + T2Editor-v8 [EOL] | | v9 | 7 | 9.0.0 | 9.3.0 | 2026-05-29 | 53일 | EOL | S1b + T2Editor-v9 [EOL] | | v10 | 9 | 10.0.0 | 10.5.1 | 2026-07-27 | 34일 | 현행 공개 | S1 current_public + T2Editor-v10 설명 계열 상태 현행 공개 판본 | | v11 | 1 | 11.0.0-beta1.0.0 | — | 2026-09-07 | — | 개발 중(비공개) | S1 in_dev + gh api 결과 private: true |

1-1. 계열 EOL 표기의 실측 위치 — 릴리즈 노트에는 없습니다

계열이 끝났다는 표시는 94개 릴리즈 노트 어디에도 계열 단위로는 없습니다. 실제로 측정한 결과:

  • 94개 릴리즈 노트(description) 전문 스캔 → 계열 단위 EOL 공지 0/10 계열
  • 94개 title 스캔 → 계열 단위 EOL 공지 0건 (1건은 15일 뒤 대체된 베타 1.0.0-beta의 제목 주석)
  • EOL 문자열은 GitHub 아카이브 저장소 설명에만 있습니다. tak2-08/T2Editor-v1 ~ T2Editor-v9 9개 저장소 설명이 각각 [EOL] T2Editor vN 계열 배포본 N개 … · 계열 상태 EOL 형식입니다. v10 저장소 설명에는 [EOL] 이 없고 계열 상태 현행 공개 판본 입니다.
  • 업그레이드 위험 신호를 릴리즈 노트에서 찾으려고 하면 주의 0/94, breaking 0/94 입니다.
  • ⚠ 위 EOL 저장소 9개는 2026-09-27 당일 일괄 생성되었습니다. 즉 최초 0일, 최대 18개월 사후 고지입니다.

따라서 EOL 판정은 배포 노트를 읽어서 알 수 없습니다. 이 표를 보십시오.

1-2. 이 위키가 94판본 중 9개(9.6%)만 알고 있었습니다

v10 계열 9개 판본 중 이 위키가 언급한 것0개 (0%)
사용자 대상 15건 중 target_editor_version: 9.0.015/15건 (100%)
서버 메타(version_tag)가 빈 값인 문서84건 중 82건

서버가 보관하는 판본 정보가 비어 있으므로 문서 frontmatter만이 유일한 판본 기록입니다.


2. PHP 요구사항 — v10 안에서 바뀐 이력 (가장 자주 오독되는 지점)

v10 계열 안에서 PHP 요구사항이 두 번 뒤집혔습니다. 릴리즈 노트만 읽으면 어느 쪽인지 알 수 없습니다.

판본날짜릴리즈 노트 원문 (verbatim)실제 의미
10.0.02026-06-24**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**권장 사양 상향. 최소 요건이 8.0으로 바뀐 게 아님
10.0.12026-06-27**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**같은 문장이 반복됨
10.1.02026-06-29**php7.4 호환 추가!**되돌림. 7.4가 다시 정식 지원 범위
10.5.02026-07-22PHP 7.4부터 8.4까지의 호환 범위를 유지하면서, 일부 함수나 확장 기능이 없는 환경에서 전체 실행이 중단되지 않도록 대체 경로를 추가했습니다.하한 7.4 고정, 대체 경로 추가
10.5.12026-07-27(노트에 PHP 관련 문장 없음)코드가 최종 답을 줍니다

2-1. 10.5.1 코드가 말하는 최종값 (권위 있는 값)

항목값등급근거 (file:line)
최소 PHP7.4.0erroradmin/environment_api.core.php:219 version_compare(PHP_VERSION, '7.4.0', '>=')
권장 PHP8.1 또는 8.2—admin/environment_api.core.php:240-241 신규 운영 환경은 PHP 8.1 또는 8.2를 권장합니다.
기계가 읽는 사양minimum: 7.4.0 / tested_through: 8.2 / curl_optional: true / ziparchive_optional: true—admin/update_api.core.php:2355 'php_client' => array(...)
필수 PHP 함수 9종file_put_contents mkdir rename copy unlink hash_file json_encode json_decode random_byteserroradmin/environment_api.core.php:152

2-2. 이 표에서 바로 답 나오는 질문

Q. 서버 PHP가 7.4인데 10.5.1을 올려도 되나요?
A. 예. 7.4.0이 10.5.1의 최소값이고 7.4는 정식 지원 범위에 포함됩니다. 10.0.0 노트의 "8.0 이상"은 10.1.0에서 이미 되돌려졌습니다. 서버를 8.0으로 올려야 할 이유가 이 문서 기준으로는 없습니다.
Q. 그럼 10.0.0 → 10.1.0 사이(2주)에 8.0으로 올린 서버는?
A. 되돌릴 필요가 없습니다. 7.4 경로가 살아 있고, 8.0 이상에서만 깨지는 코드가 이 문서 기준으로는 없습니다. [확인 필요] — 10.0.0~10.0.1에서 8.0+ 전용 API를 쓴 흔적은 10.5.1 코드로 역추적할 수 없습니다(10.0.0 판본 실물 미확보).
Q. PHP 8.4에서도 되나요?
A. 미확인. 릴리즈 노트는 "7.4부터 8.4까지"라 하고 코드가 노출하는 사양은 tested_through: 8.2 입니다. 두 1차 근거가 다릅니다. 8.3~8.4에서 실제로 검증됐는지는 이 문서로 답할 수 없습니다. 운영 환경이라면 8.2를 권장합니다(진단 코드도 8.1/8.2를 권장).
Q. PHP 8.5 이상은?
A. 미확인. 어느 1차 근거에도 8.5 언급이 없습니다.
Q. disable_functions에 뭘 빼놓으면 안 되나요?
A. 위 9종. 하나라도 빠지면 업데이트·설치가 error 로 멈춥니다. 진단 화면이 정확한 함수명을 알려 줍니다.
Q. max_execution_time / memory_limit?
A. 각각 120초 이상 / 128M 이상을 권장하며 warning 등급입니다(설치 차단 아님). admin/environment_api.core.php:169-190.

3. CMS 연동 매트릭스 (v10.5.1 코드 실측)

판본이 자동으로 어떻게 결정되는지 integration/cms/adapters/ 네 개가 답합니다.

| CMS | 설치 경로 | 자동 감지 근거 (실측) | 감지 우선순위 | 데이터 경로 | 관리자 인증 | |---|---|---|:-:|---|---| | 그누보드5 | <g5>/plugin/editor/t2editor/ | 편집기 폴더가 <root>/plugin/editor 안 + config.php·common.php·lib/common.lib.php 3개 존재 + config.php에 _GNUBOARD_ 정의 | 300 (1순위) | 미디어 <g5>/data/editor · 내부 데이터 <g5>/data/t2editor_db | CMS 관리자 로그인 또는 자체 비밀번호 (10.5.1부터) | | 라이믹스 | <rx>/modules/editor/skins/t2editor/ | 편집기 폴더가 <root>/modules/editor/skins 안 + config/config.inc.php 존재 + (common/autoload.php 또는 defaults/config.php 또는 common/defaults/config.php) | 250 (2순위) | <rx>/files | 동일 | | 독립 실행 | 웹에서 보이는 아무 폴더 | 위 둘 어디에도 걸리지 않으면 항상 최종 fallback | −1000 (최후) | <에디터폴더>/data | 자체 비밀번호 필수 | | 워드프레스 | 설치 자리가 아님 | — (환경 감지 판정 함수가 항상 false 반환) | 200 (우선순위 있으나 감지 안 됨) | 워드프레스 미디어 라이브러리 경유 | 워드프레스 capability |

근거: integration/cms/adapters/gnuboard5.php:9-14, 96-98, 113-130 · rhymix.php:9-14, 152-161 · standalone.php:5-12 · wordpress.php:3, 90-96

3-1. ⭐ 워드프레스는 "지원한다"가 아니라 "브리지만 준다"

이 행은 이전 문서에서 오독되기 쉬웠으므로 코드 원문으로 적습니다.

  • integration/cms/adapters/wordpress.php:3 원문 주석:
워드프레스는 설치환경 감지가 아니라 선택적 업로드·브라우저 브리지 capability만 제공한다.
  • integration/cms/adapters/wordpress.php:93 — 'validate_context' => function () { return false; }
  • ⇒ 워드프레스 어댑터는 환경 감지에서 한 번도 선택되지 않습니다.

그래서 워드프레스 사용자가 받는 것과 받지 못하는 것:

워드프레스에서 v10.5.1이 제공근거
✅워드프레스 미디어 라이브러리(media_handle_upload)를 거치는 업로드wordpress.php:33-60
✅워드프레스 nonce(_wpnonce)·upload_files 권한·게시물 편집 권한 검증wordpress.php:45-47
✅워드프레스 첫 화면에 붙은 wp-load.php 자동 로드wordpress.php:16-27
❌CMS 관리자 로그인 연동워드프레스는 어댑터가 CMS로 등록되지 않음
❌그누보드5·라이믹스식 데이터 경로 분리같은 사유
❌T2Editor 자체 관리자 비밀번호 게이트의 CMS 연동 경로같은 사유

워드프레스 최소 지원 판본: [확인 필요]. 릴리즈 노트 10.3.0에 "워드프레스 업로드 연동 지원"이라는 한 줄만 있고 최소 판본·최소 PHP 표기가 없습니다.

3-2. 그누보드5·라이믹스 최소 지원 판본: [확인 필요]

  • 그누보드5 — 코드에는 _GNUBOARD_ 정의가 있는지만 봅니다. 판본 하한을 검사하는 코드가 없습니다. 8.x 판본 실물도 없어 v10 계열의 하한을 확정할 수 없습니다.
  • 라이믹스 — 10.3.0 노트에 "라이믹스 2.1.x 호환성 추가"가 있습니다. 그 이전 판본에서 v10.5.1이 동작하는지에 대한 코드가 없습니다(RX_VERSION 분기 0건). 2.1.x 미만 지원 여부는 [확인 필요].

3-3. CMS별로 데이터가 쌓이는 곳이 다릅니다 (백업·옮길 때 필수)

설치 자리업로드 미디어내부 데이터(관리자 설정·인증·협업·업데이트 기록)
그누보드5<g5>/data/editor<g5>/data/t2editor_db
라이믹스<rx>/files (라이믹스 파일 모듈)<rx>/files 하위
독립 실행<에디터폴더>/data<에디터폴더>/data/t2editor_db

10.5.0에서 이 구조를 다시 정리했습니다 (10.5.1이 그누보드5 경로를 확정):

  • 10.5.0 — "그누보드5에서는 data/editor, 라이믹스에서는 files, 독립 실행 환경에서는 T2Editor/data를 기준으로 데이터를 관리합니다. 업로드 미디어를 제외한 관리자 설정, 캐시, 협업 상태, 업데이트 상태 등의 내부 데이터는 t2editor_db 아래에 모아 CMS 데이터 폴더가 불필요하게 복잡해지지 않도록 했습니다. 기존 위치에 저장된 데이터와 경로 정보는 가능한 범위에서 새 구조로 이전하거나 계속 인식합니다."
  • 10.5.1 — "이미지와 첨부파일은 기존처럼 data/editor 폴더에 저장됩니다. 관리자 설정, 인증 정보, 협업 데이터, 업데이트 기록, 서드파티 설치 정보는 data/t2editor_db 폴더에 별도로 저장됩니다. 기존 data/editor/t2editor_db 데이터는 새 위치로 자동 이전됩니다."

코드: config/t2_storage.php:253-258 (이전 중첩 위치 <데이터>/editor/t2editor_db 인식), :345-364 (실제 이전)

3-4. CMS 감지가 실패해 보일 때 (실측된 실패 패턴)

증상원인근거
CMS로 인식되지 않고 독립 실행으로 빠짐위 표의 감지 조건 중 하나가 안 맞음adapters/gnuboard5.php:9-14
서브폴더 설치 + CMS 파일 구조가 겹침10.5.0에서 수정됨10.5.0 "서브폴더 설치, T2Pack 데이터 슬롯 실행과 CMS 파일 구조가 겹치는 환경에서도 실제 T2Editor 설치 위치와 CMS 루트를 구분하도록 수정했습니다."
한 CMS 어댑터 오류가 다른 기능까지 전파10.5.0에서 분리함10.5.0 "CMS 어댑터 하나에서 오류가 발생해도 다른 환경의 처리나 일반 에디터 기능으로 오류가 전파되지 않도록 했습니다."
그누보드5 관리자인데도 "관리자 로그인 필요" 안내10.5.0에서 발생, 10.5.1에서 수정10.5.1 "그누보드5 로그인 정보를 불러오는 위치가 적절하지 않아 관리자 상태가 정상적으로 전달되지 않는 것이 원인이었습니다."

4. PHP 확장 매트릭스 (v10.5.1 · PHP 파일 86개 전수 검색)

검색 범위: releases/v10.5.1 트리의 .php 86개 전부. grep 0건은 "쓰지 않는다"는 뜻이지 "설치해도 된다"는 보장은 아닙니다.

확장 / 기능쓰이는 곳 (전수 grep)판정등급근거
json (json_encode/json_decode)필수 함수 목록필수erroradmin/environment_api.core.php:152
disable_functions 9종admin/environment_api.core.php:152필수error위 목록
cURL업데이트는 curl 또는 openssl+allow_url_fopen로 대체 가능. 서드파티 마켓 설치는 cURL 반드시 필요조건부 필수erroradmin/environment_api.core.php:222-223, 256-266, 288-297
OpenSSL + allow_url_fopencURL 대체 전송 경로조건부 필수error (조합)admin/environment_api.core.php:222-223
zip (ZipArchive)6개 파일. 없으면 gzinflate(zlib) → 그것도 없으면 관리자 브라우저 보조 해제선택warningadmin/environment_api.core.php:223-224, 267-280 / 10.5.0
zlib (gzinflate)ZipArchive 대체조건부warningadmin/environment_api.core.php:224
mbstringpolyfill만 존재(config/t2_compat.php·config/t2_utf8.php 전수 grep 1파일)선택—config/t2_compat.php:10-45, config/t2_utf8.php:9-16, 30-40 / 10.5.0 "mbstring 확장이 없는 서버에서도 iconv 또는 UTF-8 대체 처리로 주요 문자열 기능을 사용할 수 있도록 보완했습니다."
iconv3개 파일 (config/t2_utf8.php, admin/api.core.php, admin/index.core.php)선택 (mbstring 대체 제공자)—전수 grep
gdplugin/image/image_upload.core.php 단 1개 파일. WebP 변환 전용이며, 없으면 검증된 원본을 그대로 저장선택—plugin/image/image_upload.core.php:237-260 (가드 :249)
imagick86파일 0건미사용—전수 grep
fileinfo86파일 0건 (finfo_open 0건). 주석 2건이 오히려 "불필요"를 명시미사용—config/upload_config.php:32 "server-side identification uses signatures so Fileinfo is not required." :83 "server validation uses signatures without Fileinfo."
dom (ext-dom)plugin/linkcard/linkcard_fetch.core.php 단 1개 파일링크 미리보기 카드에서만 필요[확인 필요]:230-238 new DOMDocument(). class_exists('DOMDocument') 가드 0건, 호출은 :434 에서 무조건. → 확장 부재 시 이 경로 폴백 코드가 없습니다.
max_execution_time ≥ 120진단권장warningadmin/environment_api.core.php:169-180
memory_limit ≥ 128M진단권장warningadmin/environment_api.core.php:182-190

4-1. ⭐ "이 조합에선 안 된다"고 말할 수 있는 칸

기존 문서가 댓글에서 발견하도록 방치했던 부분을 여기서 고백합니다.

1. ext-dom이 없으면 "링크 미리보기 카드"가 위험합니다.
v10.5.1의 링크 미리보기 카드는 웹 페이지를 받아 new DOMDocument() 로 파싱합니다. 확장 존재 검사가 코드에 없습니다. ext-dom이 없는 서버에서 이 경로가 도달하면 어떻게 되는지는 런타임에서 재현하지 않았으므로 [확인 필요] 로 둡니다. 다만 폴백 코드가 없다는 것은 확인했습니다(전수 grep class_exists('DOMDocument') 0건).
우회: 그 기능이 필요 없다면 끄면 됩니다. 필요하면 서버 관리자에게 ext-dom 설치를 요청하십시오.
2. cURL도 없고 OpenSSL도 없는 서버는 업데이트·서드파티 설치가 막힙니다.
코드가 error 로 판정합니다. ZIP 처리에 브라우저 폴백이 있는 것과 파일을 내려받는 수송 경로가 막힌 것은 다른 문제입니다. 브라우저 보조 해제는 ZIP을 여는 단계의 대체일 뿐, 원본 ZIP을 받아올 수송 자체는 못 대체합니다.
3. mbstring도 iconv도 없는 서버의 문자열 처리 정확도는 [확인 필요]입니다.
v10.5.1은 "UTF-8 대체 처리" 경로를 넣었습니다(config/t2_utf8.php). 그 경로가 mbstring과 같은 결과를 내는지 이 문서에서는 재현하지 않았습니다. 정확한 문자가 필요한 곳(예: 파일명 바이트 단위 처리)에서 문제가 생길 수 있다는 뜻이며, 실제로 생기는지는 미확인입니다.
4. GD가 없으면 WebP 변환이 안 됩니다 — 업로드 자체는 됩니다.
GIF/WebP는 변환 없이 원본 저장, JPEG/PNG/BMP는 GD가 있을 때만 WebP로 변환하고 없으면 원본 확장자로 저장합니다. 따라서 "GD가 없다"는 이유로 업로드가 실패하면 안 됩니다. 실패한다면 원인은 GD가 아니라 권한·확장자·용량입니다.
5. 그누보드5가 관리자라는데 CMS 로그인이 안 되면 10.5.1에서도 남아 있는 경로가 있습니다.
10.5.1 자체 로그인이 생겼으므로, CMS 인증이 실패해도 admin/t2admin.key 활성화 + 자체 비밀번호로 관리자 페이지에 들어갈 수 있습니다.

5. 권한·설치 방식 매트릭스 (v10.5.1)

항목값근거
데이터 경로 최소 권장 권한707extend/js/t2_first_run_guide.js:33, 66 / 10.5.0
777동작은 하지만 권장하지 않음t2_first_run_guide.js:33, 37, 67 / 10.5.0
쓰기 권한을 줄 곳공용 데이터 경로 하나만t2_first_run_guide.js:427 "T2Editor 원본 코드, plugin, extend, locales 전체를 쓰기 가능하게 만들지 마세요."
숫자보다 시험실제 PHP 파일 생성·쓰기·삭제 시험이 통과하면 현재 권한 유지t2_first_run_guide.js:67 / 10.5.0
설치 방식 기본값data 슬롯 방식(에디터 폴더를 쓰지 않고 공용 데이터 쪽에 설치)admin/environment_api.core.php:192-201 t2env_install_mode() 기본값 data
설치 방식 선택direct(원본 폴더 직접 교체)도 가능. 관리자 → 업데이트10.4.0 "원래 폴더에 직접 업데이트하는 방식도 선택할 수 있는데"
최초 설치 게이트admin/t2admin.key.txt → admin/t2admin.key 이름 변경 + 관리자 비밀번호 + 쓰기 시험 + 안내 완독. 통과 전까지 편집 잠김t2_first_run_guide.js:19, 307 / 10.4.0, 10.5.1
루트 collab 폴더만들지 마십시오. 협업 데이터는 data/t2editor_db/collabtree 349항목에서 collab는 data/t2editor_db/collab 와 plugin/collab 두 갈래뿐
⚠ 775를 넣지 마십시오. 775는 v11 계약입니다(T2Editor v11 설치 문서 기준). v10 계약은 707입니다. 판본이 다르면 계약이 다릅니다.

6. 데이터 그 자체에 관한 주의 (사용자 영향이 큽니다)

항목실측 내용근거
배포일 표기 혼재94건 중 80건(85.1%) 이 2026.03.26 같은 점 형식. 2026-06-24 이후 14건만 2026-06-24 형식all-versions.json release_date 필드 전수
배포 파형판본 수 대비 다운로드 수가 1배열(88/94건이 정확히 1)all-versions.json download_count
계열 수명 중앙값42.5일. 10계열 중 9개가 90일 이내 교체계열별 수명 전수 계산
계열 전환 리듬10회 중 9회가 30일 이내 전환배포일 간격 전수 계산
브레이킹체인지 공지주의 0/94, breaking 0/94릴리즈 노트 전문 스캔
업그레이드 요약표94판본 역사에서 릴리즈 노트 안의 업그레이드 영향 요약은 0건릴리즈 노트 전문 스캔

이 표가 뜻하는 것: v10 계열도 34일 만에 9판본으로 교체되며, 계열이 끝날 때 이를 알리는 신호가 릴리즈 노트에 없습니다. 5절의 판본표가 유일한 안내지입니다. 업그레이드 전에 이 문서를 다시 확인하십시오.

⚠ 또한, 10.0.0에는 업그레이드 영향 요약표가 없습니다. 10.0.0은 아키텍처를 바꿨는데도 "이렇게 오르지 마라"는 안내가 없습니다. v9 → v10 이관이 필요한 사람은 N-03-migration-v9-to-v10.md를 보십시오.

7. 판본을 확인하는 방법 (v10.5.1 실측 4가지)

readme.txt 안에 버전 숫자가 두 개 있습니다. 먼저 그 구분이 필요합니다.

| # | 방법 | 무엇을 보는가 | 근거 | |:-:|---|---|---| | 1 | 배포판 루트 readme.txt 2행 | ver_10.5.1 ← 에디터 판본 | readme.txt:2 / 판독 코드 editor.core.php:415-422 get_readme_version() = preg_match('/ver_([0-9.]+)/') | | 2 | 에디터 하단 버전 정보 클릭 → 진단 패널 | 실행 환경·미디어 블록 크기·저장 필드 | editor.core.php:553 / 10.3.0 노트 | | 3 | 관리자 페이지 버전 정보 (로그인 필요) | get_readme_version() 반환값 | admin/api.core.php:464 | | 4 | 관리자 페이지 → 업데이트 | 새 판본 존재 여부 | admin/update_api.core.php:2434 |

⚠ readme.txt의 Version: 3.0.0 은 에디터 버전이 아닙니다. readme.txt:11 의 Version: 3.0.0 은 라이선스 계약 판본입니다(:70 영어 절에도 동일). 에디터 판본은 같은 파일 2행의 ver_ 값입니다. 이 둘을 혼동하면 안 됩니다.

7-1. 배포판에 없는 파일 (알려진 혼동)

존재하지 않음실물 위치
license.txt / license_en.txt / license_kr.txt라이선스는 readme.txt 한 파일 안에 한·영 두 언어로 있음
version.txt배포판 트리에 없음. 자동 판독의 후보 경로 중 하나일 뿐
update-manifest.json업데이트 시 생성. 배포판에 없음
루트 collab/data/t2editor_db/collab + plugin/collab
endpoints/v10에는 없음(루트 t2_css_min.php 1개)
config/t2_sanitize.phpv11 전용

7-2. 라이선스 검증이 실제로 무엇을 비교하는가

editor.core.php:396-404 — readme.txt의 한글 조항·영문 조항·파일 참조 정보 각 해시를 내장 기대값과 hash_equals 로 비교합니다. 즉 판본별 라이선스 파일이 아니라 파일 내용 대조 방식입니다. readme.txt를 직접 편집하면 인증이 깨집니다.


8. v11 을 준비한다면 (v10에 없는 것 — 사실 목록)

v11은 2026-09-07 베타이고 별도 private 저장소이며 공개 배포판이 아닙니다. 그래서 이 목록은 "지금 쓰라"는 권고가 아니라 "v10에서 찾지 못하시면 그것도 이유입니다"라는 설명입니다.

v11에 있는 것v10.5.1 실측
서버단 XSS 필터(T2Esanhtml(), config/t2_sanitize.php, integration/sanitize/providers/)없음 — 트리에 파일 없음, PHP 86파일 전수 grep 0건
발행 본문 스타일 번들(endpoints/t2_css_min.php?bundle=content, 로더 JS, T2Econtentstyleattach())없음 — 루트 t2_css_min.php는 단일 파일 축소기. 4개 심볼 grep 0건
호스트 보안 capability 표(config/t2_cms_security.php, T2Ehostsecuritysnapshot())없음 — grep 0건
ext-dom·fileinfo를 요구사항으로 안내v10.5.1은 둘 다 미사용 (4절)
주의: 이 목록 때문에 "v10이 안전하지 않다"고 읽으면 오독입니다. 이 문서는 v10 안에서 고르는 문서이지, v11을 권하는 문서가 아닙니다. v10을 쓰는 분은 3절·4절의 매트릭스가 답입니다.

9. 미확인 칸 목록 (근거가 없어 지어내지 않은 것)

이 문서에 남긴 미확인 / [확인 필요] 전부입니다. 지어낸 값은 없습니다.

| # | 항목 | 왜 미확인인가 | 채우는 방법 | |:-:|---|---|---| | 1 | PHP 8.4 실지원 여부 | 릴리즈 노트는 "7.4~8.4", 코드는 tested_through: 8.2 — 1차 근거 2개가 서로 다름 | 8.4 서버에서 v10.5.1 실제 설치·글쓰기 | | 2 | PHP 8.5 이상 | 어느 1차 근거에도 언급 없음 | 동일 | | 3 | 그누보드5 최소 지원 판본 | 코드에 판-version 검사가 없고 v9 이하 실물 소스 없음 | 그누보드5 각 판본 환경에서 v10.5.1 설치 시험 | | 4 | 라이믹스 최소 지원 판본 | 10.3.0이 "2.1.x 호환 추가", 그 이전 분기 코드 없음 | 2.1.x 이전 환경 시험 | | 5 | 워드프레스 최소 지원 판본·PHP | 10.3.0 한 줄 외 표기 없음 | 워드프레스 환경에서 브리지 업로드 시험 | | 6 | ext-dom 부재 시 링크 미리보기 카드 동작 | 폴백 코드 0건은 확인, 실제 동작은 재현 안 함 | ext-dom 제거 환경에서 링크 주소 붙여넣기 | | 7 | mbstring+iconv 동시 부재 시 문자열 처리 정확도 | 대체 경로 존재는 확인, 결과 동일성은 미측정 | 두 확장을 끈 서버에서 한글 파일명 업로드 | | 8 | v9 이하 판본의 PHP 요구사항 | 8.x·9.x 실물 소스 미확보 | releases/v9.3.0 등 브랜치 트리 확인 | | 9 | v9 → v10 커스텀 플러그인 hook API 1:1 대응표 | v9 실물 소스 없음 | 두 판본 트리 병렬 대조 | | 10 | v9의 collab 폴더 구조·권한 계약 | v9 실물 소스 없음 | 동일 | | 11 | 8.x 라이선스 누락 사례의 진실 | 8.x 실물 소스 없음 | 동일 | | 12 | 5.7.2 라이선스 정책 변경 내용 | 판본은 실존하나 변경 내용 1차 근거 없음 | 5.7.2 readme.txt 원문 대조 | | 13 | 10.0.0~10.0.1에서 8.0+ 전용 API 사용 여부 | 그 판본 실물 미확보 | 해당 브랜치 트리 | | 14 | 배포 파형(download_count=1)의 행위 주체 | 판본 목록만으로는 판정 불가 | — (기존 문서의 해석 금지 문구를 따름) | | 15 | 워드프레스 어댑터 우선순위 200의 실효성 | 감지 함수가 항상 false 라 관측 불가 | 코드 변경 이력 확인 |


N-xx 번호 체계 메모 (2026-09-28 확정)

이 위키의 N- 번호는 2026-09-28에 등록부를 확정하면서 붙였습니다. 확정된 신규 문서는 4건입니다.

번호슬러그내용
N-02N-02-admin-console-guide.md통합 관리 페이지 가이드
N-03N-03-migration-v9-to-v10.mdv9 → v10 이관 안내서
N-05N-05-cms-adapter-and-data-paths.mdCMS 어댑터와 데이터 저장 위치
N-06N-06-server-sanitize-and-content-style.md서버측 본문 정제와 게시 화면 스타일

N-01 · N-04 · N-07은 비어 있습니다. 번호를 미리 예약하면 그 번호가 "예정된 문서가 있다"는 뜻으로 읽히고, 실제로 그런 문서가 생기지 않으면 독자가 찾다 포기합니다. 필요해지는 시점에 그때 번호를 쓰십시오. 이전 문안에서 [[N-08-admin-console-guide]]·[[N-06-rhymix-integration-guide]]처럼 가리키던 링크는 이 등록부 기준으로 교정되었습니다(N-08 → N-02, 라이믹스 경로는 N-05에 포함).

10. 참고 자료

  • 공식 배포판 목록(94판본): 이 위키 내부 데이터 all-versions.json
  • 공식 릴리즈 노트(v10 9건 전문): 이 위키 내부 데이터 v10-release-notes.json
  • 배포판 실물: tak2-08/T2Editor-v10 저장소 · 브랜치 releases/v10.5.1
  • 계열 상태: tak2-08/T2Editor-v1 ~ T2Editor-v11 저장소 설명
  • v11 설치·연동 문서: T2Editor v11 guide.txt (v10 항목이 아님을 구분하는 용도로만 인용)
  • 판본별 이슈 대응: 72-version-issues-guide.md
  • 최초 설치 절차: 01-installation-guide.md
  • 오류 대응: 71-error-handling-guide.md
  • v9 → v10 이관: N-03-migration-v9-to-v10.md

11. 문서 관리 메모

  • 9절의 미확인 칸이 줄었다면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다. 칸을 지우지 말고 9절 표를 같이 고치십시오.
  • 이 문서는 판본이 바뀌면 매트릭스 전체가 낡습니다. 현행판이 바뀌면 1절·2절·7절을 먼저 고치고 나머지를 검토하십시오.
  • 6절 수치는 배포 판본 목록에서 기계로 다시 뽑을 수 있습니다. 사람이 옮겨 적지 마십시오.
  • 어떤 칸에 미확인이 있으면 그 칸을 지우지 말고 §9 표를 함께 고치십시오. 지워지면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다.
r3 정정 (2026-09-28, T2WIKI 편집): 존재하지 않는 문서로 향하던 내부 링크를 실제 문서로 재지정했습니다(N-08-admin-console-guide→N-02-admin-console-guide.md, N-06-rhymix-integration-guide→N-05-cms-adapter-and-data-paths.md). 원문은 리비전 이력에 남아 있습니다.
2026-09-28 19:19

버전 호환성 매트릭스 (현행판 10.5.1 기준)

이 문서는 2026-09-28에 다시 썼습니다.
원본은 target_editor_version: 9.0.0 기준이었고, 버전표가 9.0.0(2026-04-07)에서 멈춰 있었습니다.
그 사이 v10 계열 9개 판본이 나왔습니다. 그 구간이 이 문서의 공백이었습니다.

0. 한 줄 요약

현행 공개 판본10.5.1 (2026-07-27)
EOLv1 ~ v9 (전부)
개발 중v11.0.0-beta1.0.0 (2026-09-07) · 별도 private 저장소 · 공개 배포 아님
전체 판본 수94개 (v11 베타 포함)
최소 PHP7.4.0 — 8.0은 필수가 아닙니다
자동 설치 자리그누보드5 · 라이믹스 · 독립 실행 3곳 (워드프레스는 브리지)

1. 판본별 상태 매트릭스

계열 11개 · 합계 94개. 배포일은 all-versions.json 원문 값이며 일자 표기가 80/94건이 2026.03.26 같은 점 형식입니다(표기 혼재는 아래 6절).

| 계열 | 판본 수 | 첫 판본 | 최종판 | 최종판일 | 계열 수명 | 상태 | 판본 존재 근거 | |---|:-:|---|---|---|:-:|---|---| | v1 | 19 | 1.0.0-beta | 1.6.3 | 2025-05-01 | 90일 | EOL | S1b + T2Editor-v1 설명 [EOL] | | v2 | 3 | 2.0.0_B | 2.0.0 | 2025-06-03 | 34일 | EOL | S1b + T2Editor-v2 [EOL] | | v3 | 10 | 3.0.0 | 3.0.9 | 2025-10-06 | 122일 | EOL | S1b + T2Editor-v3 [EOL] | | v4 | 3 | 4.0.0 | 4.0.2 | 2025-10-08 | 2일 | EOL | S1b + T2Editor-v4 [EOL] | | v5 | 32 | 5.1.0-beta1.0.2 | 5.10.0 | 2025-12-08 | 62일 | EOL | S1b + T2Editor-v5 [EOL] | | v6 | 1 | 6.0.0 | 6.0.0 | 2025-12-09 | 1일 | EOL | S1b + T2Editor-v6 [EOL] | | v7 | 3 | 7.0.0 | 7.0.2 | 2025-12-19 | 6일 | EOL | S1b + T2Editor-v7 [EOL] | | v8 | 6 | 8.0.0 | 8.2.0 | 2026-03-26 | 87일 | EOL | S1b + T2Editor-v8 [EOL] | | v9 | 7 | 9.0.0 | 9.3.0 | 2026-05-29 | 53일 | EOL | S1b + T2Editor-v9 [EOL] | | v10 | 9 | 10.0.0 | 10.5.1 | 2026-07-27 | 34일 | 현행 공개 | S1 current_public + T2Editor-v10 설명 계열 상태 현행 공개 판본 | | v11 | 1 | 11.0.0-beta1.0.0 | — | 2026-09-07 | — | 개발 중(비공개) | S1 in_dev + gh api 결과 private: true |

1-1. 계열 EOL 표기의 실측 위치 — 릴리즈 노트에는 없습니다

계열이 끝났다는 표시는 94개 릴리즈 노트 어디에도 계열 단위로는 없습니다. 실제로 측정한 결과:

  • 94개 릴리즈 노트(description) 전문 스캔 → 계열 단위 EOL 공지 0/10 계열
  • 94개 title 스캔 → 계열 단위 EOL 공지 0건 (1건은 15일 뒤 대체된 베타 1.0.0-beta의 제목 주석)
  • EOL 문자열은 GitHub 아카이브 저장소 설명에만 있습니다. tak2-08/T2Editor-v1 ~ T2Editor-v9 9개 저장소 설명이 각각 [EOL] T2Editor vN 계열 배포본 N개 … · 계열 상태 EOL 형식입니다. v10 저장소 설명에는 [EOL] 이 없고 계열 상태 현행 공개 판본 입니다.
  • 업그레이드 위험 신호를 릴리즈 노트에서 찾으려고 하면 주의 0/94, breaking 0/94 입니다.
  • ⚠ 위 EOL 저장소 9개는 2026-09-27 당일 일괄 생성되었습니다. 즉 최초 0일, 최대 18개월 사후 고지입니다.

따라서 EOL 판정은 배포 노트를 읽어서 알 수 없습니다. 이 표를 보십시오.

1-2. 이 위키가 94판본 중 9개(9.6%)만 알고 있었습니다

v10 계열 9개 판본 중 이 위키가 언급한 것0개 (0%)
사용자 대상 15건 중 target_editor_version: 9.0.015/15건 (100%)
서버 메타(version_tag)가 빈 값인 문서84건 중 82건

서버가 보관하는 판본 정보가 비어 있으므로 문서 frontmatter만이 유일한 판본 기록입니다.


2. PHP 요구사항 — v10 안에서 바뀐 이력 (가장 자주 오독되는 지점)

v10 계열 안에서 PHP 요구사항이 두 번 뒤집혔습니다. 릴리즈 노트만 읽으면 어느 쪽인지 알 수 없습니다.

판본날짜릴리즈 노트 원문 (verbatim)실제 의미
10.0.02026-06-24**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**권장 사양 상향. 최소 요건이 8.0으로 바뀐 게 아님
10.0.12026-06-27**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**같은 문장이 반복됨
10.1.02026-06-29**php7.4 호환 추가!**되돌림. 7.4가 다시 정식 지원 범위
10.5.02026-07-22PHP 7.4부터 8.4까지의 호환 범위를 유지하면서, 일부 함수나 확장 기능이 없는 환경에서 전체 실행이 중단되지 않도록 대체 경로를 추가했습니다.하한 7.4 고정, 대체 경로 추가
10.5.12026-07-27(노트에 PHP 관련 문장 없음)코드가 최종 답을 줍니다

2-1. 10.5.1 코드가 말하는 최종값 (권위 있는 값)

항목값등급근거 (file:line)
최소 PHP7.4.0erroradmin/environment_api.core.php:219 version_compare(PHP_VERSION, '7.4.0', '>=')
권장 PHP8.1 또는 8.2—admin/environment_api.core.php:240-241 신규 운영 환경은 PHP 8.1 또는 8.2를 권장합니다.
기계가 읽는 사양minimum: 7.4.0 / tested_through: 8.2 / curl_optional: true / ziparchive_optional: true—admin/update_api.core.php:2355 'php_client' => array(...)
필수 PHP 함수 9종file_put_contents mkdir rename copy unlink hash_file json_encode json_decode random_byteserroradmin/environment_api.core.php:152

2-2. 이 표에서 바로 답 나오는 질문

Q. 서버 PHP가 7.4인데 10.5.1을 올려도 되나요?
A. 예. 7.4.0이 10.5.1의 최소값이고 7.4는 정식 지원 범위에 포함됩니다. 10.0.0 노트의 "8.0 이상"은 10.1.0에서 이미 되돌려졌습니다. 서버를 8.0으로 올려야 할 이유가 이 문서 기준으로는 없습니다.
Q. 그럼 10.0.0 → 10.1.0 사이(2주)에 8.0으로 올린 서버는?
A. 되돌릴 필요가 없습니다. 7.4 경로가 살아 있고, 8.0 이상에서만 깨지는 코드가 이 문서 기준으로는 없습니다. [확인 필요] — 10.0.0~10.0.1에서 8.0+ 전용 API를 쓴 흔적은 10.5.1 코드로 역추적할 수 없습니다(10.0.0 판본 실물 미확보).
Q. PHP 8.4에서도 되나요?
A. 미확인. 릴리즈 노트는 "7.4부터 8.4까지"라 하고 코드가 노출하는 사양은 tested_through: 8.2 입니다. 두 1차 근거가 다릅니다. 8.3~8.4에서 실제로 검증됐는지는 이 문서로 답할 수 없습니다. 운영 환경이라면 8.2를 권장합니다(진단 코드도 8.1/8.2를 권장).
Q. PHP 8.5 이상은?
A. 미확인. 어느 1차 근거에도 8.5 언급이 없습니다.
Q. disable_functions에 뭘 빼놓으면 안 되나요?
A. 위 9종. 하나라도 빠지면 업데이트·설치가 error 로 멈춥니다. 진단 화면이 정확한 함수명을 알려 줍니다.
Q. max_execution_time / memory_limit?
A. 각각 120초 이상 / 128M 이상을 권장하며 warning 등급입니다(설치 차단 아님). admin/environment_api.core.php:169-190.

3. CMS 연동 매트릭스 (v10.5.1 코드 실측)

판본이 자동으로 어떻게 결정되는지 integration/cms/adapters/ 네 개가 답합니다.

| CMS | 설치 경로 | 자동 감지 근거 (실측) | 감지 우선순위 | 데이터 경로 | 관리자 인증 | |---|---|---|:-:|---|---| | 그누보드5 | <g5>/plugin/editor/t2editor/ | 편집기 폴더가 <root>/plugin/editor 안 + config.php·common.php·lib/common.lib.php 3개 존재 + config.php에 _GNUBOARD_ 정의 | 300 (1순위) | 미디어 <g5>/data/editor · 내부 데이터 <g5>/data/t2editor_db | CMS 관리자 로그인 또는 자체 비밀번호 (10.5.1부터) | | 라이믹스 | <rx>/modules/editor/skins/t2editor/ | 편집기 폴더가 <root>/modules/editor/skins 안 + config/config.inc.php 존재 + (common/autoload.php 또는 defaults/config.php 또는 common/defaults/config.php) | 250 (2순위) | <rx>/files | 동일 | | 독립 실행 | 웹에서 보이는 아무 폴더 | 위 둘 어디에도 걸리지 않으면 항상 최종 fallback | −1000 (최후) | <에디터폴더>/data | 자체 비밀번호 필수 | | 워드프레스 | 설치 자리가 아님 | — (환경 감지 판정 함수가 항상 false 반환) | 200 (우선순위 있으나 감지 안 됨) | 워드프레스 미디어 라이브러리 경유 | 워드프레스 capability |

근거: integration/cms/adapters/gnuboard5.php:9-14, 96-98, 113-130 · rhymix.php:9-14, 152-161 · standalone.php:5-12 · wordpress.php:3, 90-96

3-1. ⭐ 워드프레스는 "지원한다"가 아니라 "브리지만 준다"

이 행은 이전 문서에서 오독되기 쉬웠으므로 코드 원문으로 적습니다.

  • integration/cms/adapters/wordpress.php:3 원문 주석:
워드프레스는 설치환경 감지가 아니라 선택적 업로드·브라우저 브리지 capability만 제공한다.
  • integration/cms/adapters/wordpress.php:93 — 'validate_context' => function () { return false; }
  • ⇒ 워드프레스 어댑터는 환경 감지에서 한 번도 선택되지 않습니다.

그래서 워드프레스 사용자가 받는 것과 받지 못하는 것:

워드프레스에서 v10.5.1이 제공근거
✅워드프레스 미디어 라이브러리(media_handle_upload)를 거치는 업로드wordpress.php:33-60
✅워드프레스 nonce(_wpnonce)·upload_files 권한·게시물 편집 권한 검증wordpress.php:45-47
✅워드프레스 첫 화면에 붙은 wp-load.php 자동 로드wordpress.php:16-27
❌CMS 관리자 로그인 연동워드프레스는 어댑터가 CMS로 등록되지 않음
❌그누보드5·라이믹스식 데이터 경로 분리같은 사유
❌T2Editor 자체 관리자 비밀번호 게이트의 CMS 연동 경로같은 사유

워드프레스 최소 지원 판본: [확인 필요]. 릴리즈 노트 10.3.0에 "워드프레스 업로드 연동 지원"이라는 한 줄만 있고 최소 판본·최소 PHP 표기가 없습니다.

3-2. 그누보드5·라이믹스 최소 지원 판본: [확인 필요]

  • 그누보드5 — 코드에는 _GNUBOARD_ 정의가 있는지만 봅니다. 판본 하한을 검사하는 코드가 없습니다. 8.x 판본 실물도 없어 v10 계열의 하한을 확정할 수 없습니다.
  • 라이믹스 — 10.3.0 노트에 "라이믹스 2.1.x 호환성 추가"가 있습니다. 그 이전 판본에서 v10.5.1이 동작하는지에 대한 코드가 없습니다(RX_VERSION 분기 0건). 2.1.x 미만 지원 여부는 [확인 필요].

3-3. CMS별로 데이터가 쌓이는 곳이 다릅니다 (백업·옮길 때 필수)

설치 자리업로드 미디어내부 데이터(관리자 설정·인증·협업·업데이트 기록)
그누보드5<g5>/data/editor<g5>/data/t2editor_db
라이믹스<rx>/files (라이믹스 파일 모듈)<rx>/files 하위
독립 실행<에디터폴더>/data<에디터폴더>/data/t2editor_db

10.5.0에서 이 구조를 다시 정리했습니다 (10.5.1이 그누보드5 경로를 확정):

  • 10.5.0 — "그누보드5에서는 data/editor, 라이믹스에서는 files, 독립 실행 환경에서는 T2Editor/data를 기준으로 데이터를 관리합니다. 업로드 미디어를 제외한 관리자 설정, 캐시, 협업 상태, 업데이트 상태 등의 내부 데이터는 t2editor_db 아래에 모아 CMS 데이터 폴더가 불필요하게 복잡해지지 않도록 했습니다. 기존 위치에 저장된 데이터와 경로 정보는 가능한 범위에서 새 구조로 이전하거나 계속 인식합니다."
  • 10.5.1 — "이미지와 첨부파일은 기존처럼 data/editor 폴더에 저장됩니다. 관리자 설정, 인증 정보, 협업 데이터, 업데이트 기록, 서드파티 설치 정보는 data/t2editor_db 폴더에 별도로 저장됩니다. 기존 data/editor/t2editor_db 데이터는 새 위치로 자동 이전됩니다."

코드: config/t2_storage.php:253-258 (이전 중첩 위치 <데이터>/editor/t2editor_db 인식), :345-364 (실제 이전)

3-4. CMS 감지가 실패해 보일 때 (실측된 실패 패턴)

증상원인근거
CMS로 인식되지 않고 독립 실행으로 빠짐위 표의 감지 조건 중 하나가 안 맞음adapters/gnuboard5.php:9-14
서브폴더 설치 + CMS 파일 구조가 겹침10.5.0에서 수정됨10.5.0 "서브폴더 설치, T2Pack 데이터 슬롯 실행과 CMS 파일 구조가 겹치는 환경에서도 실제 T2Editor 설치 위치와 CMS 루트를 구분하도록 수정했습니다."
한 CMS 어댑터 오류가 다른 기능까지 전파10.5.0에서 분리함10.5.0 "CMS 어댑터 하나에서 오류가 발생해도 다른 환경의 처리나 일반 에디터 기능으로 오류가 전파되지 않도록 했습니다."
그누보드5 관리자인데도 "관리자 로그인 필요" 안내10.5.0에서 발생, 10.5.1에서 수정10.5.1 "그누보드5 로그인 정보를 불러오는 위치가 적절하지 않아 관리자 상태가 정상적으로 전달되지 않는 것이 원인이었습니다."

4. PHP 확장 매트릭스 (v10.5.1 · PHP 파일 86개 전수 검색)

검색 범위: releases/v10.5.1 트리의 .php 86개 전부. grep 0건은 "쓰지 않는다"는 뜻이지 "설치해도 된다"는 보장은 아닙니다.

확장 / 기능쓰이는 곳 (전수 grep)판정등급근거
json (json_encode/json_decode)필수 함수 목록필수erroradmin/environment_api.core.php:152
disable_functions 9종admin/environment_api.core.php:152필수error위 목록
cURL업데이트는 curl 또는 openssl+allow_url_fopen로 대체 가능. 서드파티 마켓 설치는 cURL 반드시 필요조건부 필수erroradmin/environment_api.core.php:222-223, 256-266, 288-297
OpenSSL + allow_url_fopencURL 대체 전송 경로조건부 필수error (조합)admin/environment_api.core.php:222-223
zip (ZipArchive)6개 파일. 없으면 gzinflate(zlib) → 그것도 없으면 관리자 브라우저 보조 해제선택warningadmin/environment_api.core.php:223-224, 267-280 / 10.5.0
zlib (gzinflate)ZipArchive 대체조건부warningadmin/environment_api.core.php:224
mbstringpolyfill만 존재(config/t2_compat.php·config/t2_utf8.php 전수 grep 1파일)선택—config/t2_compat.php:10-45, config/t2_utf8.php:9-16, 30-40 / 10.5.0 "mbstring 확장이 없는 서버에서도 iconv 또는 UTF-8 대체 처리로 주요 문자열 기능을 사용할 수 있도록 보완했습니다."
iconv3개 파일 (config/t2_utf8.php, admin/api.core.php, admin/index.core.php)선택 (mbstring 대체 제공자)—전수 grep
gdplugin/image/image_upload.core.php 단 1개 파일. WebP 변환 전용이며, 없으면 검증된 원본을 그대로 저장선택—plugin/image/image_upload.core.php:237-260 (가드 :249)
imagick86파일 0건미사용—전수 grep
fileinfo86파일 0건 (finfo_open 0건). 주석 2건이 오히려 "불필요"를 명시미사용—config/upload_config.php:32 "server-side identification uses signatures so Fileinfo is not required." :83 "server validation uses signatures without Fileinfo."
dom (ext-dom)plugin/linkcard/linkcard_fetch.core.php 단 1개 파일링크 미리보기 카드에서만 필요[확인 필요]:230-238 new DOMDocument(). class_exists('DOMDocument') 가드 0건, 호출은 :434 에서 무조건. → 확장 부재 시 이 경로 폴백 코드가 없습니다.
max_execution_time ≥ 120진단권장warningadmin/environment_api.core.php:169-180
memory_limit ≥ 128M진단권장warningadmin/environment_api.core.php:182-190

4-1. ⭐ "이 조합에선 안 된다"고 말할 수 있는 칸

기존 문서가 댓글에서 발견하도록 방치했던 부분을 여기서 고백합니다.

1. ext-dom이 없으면 "링크 미리보기 카드"가 위험합니다.
v10.5.1의 링크 미리보기 카드는 웹 페이지를 받아 new DOMDocument() 로 파싱합니다. 확장 존재 검사가 코드에 없습니다. ext-dom이 없는 서버에서 이 경로가 도달하면 어떻게 되는지는 런타임에서 재현하지 않았으므로 [확인 필요] 로 둡니다. 다만 폴백 코드가 없다는 것은 확인했습니다(전수 grep class_exists('DOMDocument') 0건).
우회: 그 기능이 필요 없다면 끄면 됩니다. 필요하면 서버 관리자에게 ext-dom 설치를 요청하십시오.
2. cURL도 없고 OpenSSL도 없는 서버는 업데이트·서드파티 설치가 막힙니다.
코드가 error 로 판정합니다. ZIP 처리에 브라우저 폴백이 있는 것과 파일을 내려받는 수송 경로가 막힌 것은 다른 문제입니다. 브라우저 보조 해제는 ZIP을 여는 단계의 대체일 뿐, 원본 ZIP을 받아올 수송 자체는 못 대체합니다.
3. mbstring도 iconv도 없는 서버의 문자열 처리 정확도는 [확인 필요]입니다.
v10.5.1은 "UTF-8 대체 처리" 경로를 넣었습니다(config/t2_utf8.php). 그 경로가 mbstring과 같은 결과를 내는지 이 문서에서는 재현하지 않았습니다. 정확한 문자가 필요한 곳(예: 파일명 바이트 단위 처리)에서 문제가 생길 수 있다는 뜻이며, 실제로 생기는지는 미확인입니다.
4. GD가 없으면 WebP 변환이 안 됩니다 — 업로드 자체는 됩니다.
GIF/WebP는 변환 없이 원본 저장, JPEG/PNG/BMP는 GD가 있을 때만 WebP로 변환하고 없으면 원본 확장자로 저장합니다. 따라서 "GD가 없다"는 이유로 업로드가 실패하면 안 됩니다. 실패한다면 원인은 GD가 아니라 권한·확장자·용량입니다.
5. 그누보드5가 관리자라는데 CMS 로그인이 안 되면 10.5.1에서도 남아 있는 경로가 있습니다.
10.5.1 자체 로그인이 생겼으므로, CMS 인증이 실패해도 admin/t2admin.key 활성화 + 자체 비밀번호로 관리자 페이지에 들어갈 수 있습니다.

5. 권한·설치 방식 매트릭스 (v10.5.1)

항목값근거
데이터 경로 최소 권장 권한707extend/js/t2_first_run_guide.js:33, 66 / 10.5.0
777동작은 하지만 권장하지 않음t2_first_run_guide.js:33, 37, 67 / 10.5.0
쓰기 권한을 줄 곳공용 데이터 경로 하나만t2_first_run_guide.js:427 "T2Editor 원본 코드, plugin, extend, locales 전체를 쓰기 가능하게 만들지 마세요."
숫자보다 시험실제 PHP 파일 생성·쓰기·삭제 시험이 통과하면 현재 권한 유지t2_first_run_guide.js:67 / 10.5.0
설치 방식 기본값data 슬롯 방식(에디터 폴더를 쓰지 않고 공용 데이터 쪽에 설치)admin/environment_api.core.php:192-201 t2env_install_mode() 기본값 data
설치 방식 선택direct(원본 폴더 직접 교체)도 가능. 관리자 → 업데이트10.4.0 "원래 폴더에 직접 업데이트하는 방식도 선택할 수 있는데"
최초 설치 게이트admin/t2admin.key.txt → admin/t2admin.key 이름 변경 + 관리자 비밀번호 + 쓰기 시험 + 안내 완독. 통과 전까지 편집 잠김t2_first_run_guide.js:19, 307 / 10.4.0, 10.5.1
루트 collab 폴더만들지 마십시오. 협업 데이터는 data/t2editor_db/collabtree 349항목에서 collab는 data/t2editor_db/collab 와 plugin/collab 두 갈래뿐
⚠ 775를 넣지 마십시오. 775는 v11 계약입니다(T2Editor v11 설치 문서 기준). v10 계약은 707입니다. 판본이 다르면 계약이 다릅니다.

6. 데이터 그 자체에 관한 주의 (사용자 영향이 큽니다)

항목실측 내용근거
배포일 표기 혼재94건 중 80건(85.1%) 이 2026.03.26 같은 점 형식. 2026-06-24 이후 14건만 2026-06-24 형식all-versions.json release_date 필드 전수
배포 파형판본 수 대비 다운로드 수가 1배열(88/94건이 정확히 1)all-versions.json download_count
계열 수명 중앙값42.5일. 10계열 중 9개가 90일 이내 교체계열별 수명 전수 계산
계열 전환 리듬10회 중 9회가 30일 이내 전환배포일 간격 전수 계산
브레이킹체인지 공지주의 0/94, breaking 0/94릴리즈 노트 전문 스캔
업그레이드 요약표94판본 역사에서 릴리즈 노트 안의 업그레이드 영향 요약은 0건릴리즈 노트 전문 스캔

이 표가 뜻하는 것: v10 계열도 34일 만에 9판본으로 교체되며, 계열이 끝날 때 이를 알리는 신호가 릴리즈 노트에 없습니다. 5절의 판본표가 유일한 안내지입니다. 업그레이드 전에 이 문서를 다시 확인하십시오.

⚠ 또한, 10.0.0에는 업그레이드 영향 요약표가 없습니다. 10.0.0은 아키텍처를 바꿨는데도 "이렇게 오르지 마라"는 안내가 없습니다. v9 → v10 이관이 필요한 사람은 N-03-migration-v9-to-v10.md를 보십시오.

7. 판본을 확인하는 방법 (v10.5.1 실측 4가지)

readme.txt 안에 버전 숫자가 두 개 있습니다. 먼저 그 구분이 필요합니다.

| # | 방법 | 무엇을 보는가 | 근거 | |:-:|---|---|---| | 1 | 배포판 루트 readme.txt 2행 | ver_10.5.1 ← 에디터 판본 | readme.txt:2 / 판독 코드 editor.core.php:415-422 get_readme_version() = preg_match('/ver_([0-9.]+)/') | | 2 | 에디터 하단 버전 정보 클릭 → 진단 패널 | 실행 환경·미디어 블록 크기·저장 필드 | editor.core.php:553 / 10.3.0 노트 | | 3 | 관리자 페이지 버전 정보 (로그인 필요) | get_readme_version() 반환값 | admin/api.core.php:464 | | 4 | 관리자 페이지 → 업데이트 | 새 판본 존재 여부 | admin/update_api.core.php:2434 |

⚠ readme.txt의 Version: 3.0.0 은 에디터 버전이 아닙니다. readme.txt:11 의 Version: 3.0.0 은 라이선스 계약 판본입니다(:70 영어 절에도 동일). 에디터 판본은 같은 파일 2행의 ver_ 값입니다. 이 둘을 혼동하면 안 됩니다.

7-1. 배포판에 없는 파일 (알려진 혼동)

존재하지 않음실물 위치
license.txt / license_en.txt / license_kr.txt라이선스는 readme.txt 한 파일 안에 한·영 두 언어로 있음
version.txt배포판 트리에 없음. 자동 판독의 후보 경로 중 하나일 뿐
update-manifest.json업데이트 시 생성. 배포판에 없음
루트 collab/data/t2editor_db/collab + plugin/collab
endpoints/v10에는 없음(루트 t2_css_min.php 1개)
config/t2_sanitize.phpv11 전용

7-2. 라이선스 검증이 실제로 무엇을 비교하는가

editor.core.php:396-404 — readme.txt의 한글 조항·영문 조항·파일 참조 정보 각 해시를 내장 기대값과 hash_equals 로 비교합니다. 즉 판본별 라이선스 파일이 아니라 파일 내용 대조 방식입니다. readme.txt를 직접 편집하면 인증이 깨집니다.


8. v11 을 준비한다면 (v10에 없는 것 — 사실 목록)

v11은 2026-09-07 베타이고 별도 private 저장소이며 공개 배포판이 아닙니다. 그래서 이 목록은 "지금 쓰라"는 권고가 아니라 "v10에서 찾지 못하시면 그것도 이유입니다"라는 설명입니다.

v11에 있는 것v10.5.1 실측
서버단 XSS 필터(T2Esanhtml(), config/t2_sanitize.php, integration/sanitize/providers/)없음 — 트리에 파일 없음, PHP 86파일 전수 grep 0건
발행 본문 스타일 번들(endpoints/t2_css_min.php?bundle=content, 로더 JS, T2Econtentstyleattach())없음 — 루트 t2_css_min.php는 단일 파일 축소기. 4개 심볼 grep 0건
호스트 보안 capability 표(config/t2_cms_security.php, T2Ehostsecuritysnapshot())없음 — grep 0건
ext-dom·fileinfo를 요구사항으로 안내v10.5.1은 둘 다 미사용 (4절)
주의: 이 목록 때문에 "v10이 안전하지 않다"고 읽으면 오독입니다. 이 문서는 v10 안에서 고르는 문서이지, v11을 권하는 문서가 아닙니다. v10을 쓰는 분은 3절·4절의 매트릭스가 답입니다.

9. 미확인 칸 목록 (근거가 없어 지어내지 않은 것)

이 문서에 남긴 미확인 / [확인 필요] 전부입니다. 지어낸 값은 없습니다.

| # | 항목 | 왜 미확인인가 | 채우는 방법 | |:-:|---|---|---| | 1 | PHP 8.4 실지원 여부 | 릴리즈 노트는 "7.4~8.4", 코드는 tested_through: 8.2 — 1차 근거 2개가 서로 다름 | 8.4 서버에서 v10.5.1 실제 설치·글쓰기 | | 2 | PHP 8.5 이상 | 어느 1차 근거에도 언급 없음 | 동일 | | 3 | 그누보드5 최소 지원 판본 | 코드에 판-version 검사가 없고 v9 이하 실물 소스 없음 | 그누보드5 각 판본 환경에서 v10.5.1 설치 시험 | | 4 | 라이믹스 최소 지원 판본 | 10.3.0이 "2.1.x 호환 추가", 그 이전 분기 코드 없음 | 2.1.x 이전 환경 시험 | | 5 | 워드프레스 최소 지원 판본·PHP | 10.3.0 한 줄 외 표기 없음 | 워드프레스 환경에서 브리지 업로드 시험 | | 6 | ext-dom 부재 시 링크 미리보기 카드 동작 | 폴백 코드 0건은 확인, 실제 동작은 재현 안 함 | ext-dom 제거 환경에서 링크 주소 붙여넣기 | | 7 | mbstring+iconv 동시 부재 시 문자열 처리 정확도 | 대체 경로 존재는 확인, 결과 동일성은 미측정 | 두 확장을 끈 서버에서 한글 파일명 업로드 | | 8 | v9 이하 판본의 PHP 요구사항 | 8.x·9.x 실물 소스 미확보 | releases/v9.3.0 등 브랜치 트리 확인 | | 9 | v9 → v10 커스텀 플러그인 hook API 1:1 대응표 | v9 실물 소스 없음 | 두 판본 트리 병렬 대조 | | 10 | v9의 collab 폴더 구조·권한 계약 | v9 실물 소스 없음 | 동일 | | 11 | 8.x 라이선스 누락 사례의 진실 | 8.x 실물 소스 없음 | 동일 | | 12 | 5.7.2 라이선스 정책 변경 내용 | 판본은 실존하나 변경 내용 1차 근거 없음 | 5.7.2 readme.txt 원문 대조 | | 13 | 10.0.0~10.0.1에서 8.0+ 전용 API 사용 여부 | 그 판본 실물 미확보 | 해당 브랜치 트리 | | 14 | 배포 파형(download_count=1)의 행위 주체 | 판본 목록만으로는 판정 불가 | — (기존 문서의 해석 금지 문구를 따름) | | 15 | 워드프레스 어댑터 우선순위 200의 실효성 | 감지 함수가 항상 false 라 관측 불가 | 코드 변경 이력 확인 |


N-xx 번호 체계 메모 (2026-09-28 확정)

이 위키의 N- 번호는 2026-09-28에 등록부를 확정하면서 붙였습니다. 확정된 신규 문서는 4건입니다.

번호슬러그내용
N-02N-02-admin-console-guide.md통합 관리 페이지 가이드
N-03N-03-migration-v9-to-v10.mdv9 → v10 이관 안내서
N-05N-05-cms-adapter-and-data-paths.mdCMS 어댑터와 데이터 저장 위치
N-06N-06-server-sanitize-and-content-style.md서버측 본문 정제와 게시 화면 스타일

N-01 · N-04 · N-07은 비어 있습니다. 번호를 미리 예약하면 그 번호가 "예정된 문서가 있다"는 뜻으로 읽히고, 실제로 그런 문서가 생기지 않으면 독자가 찾다 포기합니다. 필요해지는 시점에 그때 번호를 쓰십시오. 이전 문안에서 [[N-02-admin-console-guide.md]]·[[N-05-cms-adapter-and-data-paths.md]]처럼 가리키던 링크는 이 등록부 기준으로 교정되었습니다(N-08 → N-02, 라이믹스 경로는 N-05에 포함).

10. 참고 자료

  • 공식 배포판 목록(94판본): 이 위키 내부 데이터 all-versions.json
  • 공식 릴리즈 노트(v10 9건 전문): 이 위키 내부 데이터 v10-release-notes.json
  • 배포판 실물: tak2-08/T2Editor-v10 저장소 · 브랜치 releases/v10.5.1
  • 계열 상태: tak2-08/T2Editor-v1 ~ T2Editor-v11 저장소 설명
  • v11 설치·연동 문서: T2Editor v11 guide.txt (v10 항목이 아님을 구분하는 용도로만 인용)
  • 판본별 이슈 대응: 72-version-issues-guide.md
  • 최초 설치 절차: 01-installation-guide.md
  • 오류 대응: 71-error-handling-guide.md
  • v9 → v10 이관: N-03-migration-v9-to-v10.md

11. 문서 관리 메모

  • 9절의 미확인 칸이 줄었다면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다. 칸을 지우지 말고 9절 표를 같이 고치십시오.
  • 이 문서는 판본이 바뀌면 매트릭스 전체가 낡습니다. 현행판이 바뀌면 1절·2절·7절을 먼저 고치고 나머지를 검토하십시오.
  • 6절 수치는 배포 판본 목록에서 기계로 다시 뽑을 수 있습니다. 사람이 옮겨 적지 마십시오.
  • 어떤 칸에 미확인이 있으면 그 칸을 지우지 말고 §9 표를 함께 고치십시오. 지워지면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다.
라인 단위 비교
이전 새 버전
1 --- 1 ---
2 title: 버전 호환성 매트릭스 (현행판 10.5.1 기준) 2 title: 버전 호환성 매트릭스 (현행판 10.5.1 기준)
3 document_id: 06-version-compatibility-guide 3 document_id: 06-version-compatibility-guide
4 slug: 06-version-compatibility-guide 4 slug: 06-version-compatibility-guide
5 target_editor_version: 10.5.1 5 target_editor_version: 10.5.1
6 document_type: compatibility 6 document_type: compatibility
7 doc_type: compatibility 7 doc_type: compatibility
8 target_readers: [초보자, 웹마스터, 개발자, AI agent] 8 target_readers: [초보자, 웹마스터, 개발자, AI agent]
9 importance: High 9 importance: High
10 dependency: Medium 10 dependency: Medium
11 core_type: Compatibility 11 core_type: Compatibility
12 stability: [Version-Bound] 12 stability: [Version-Bound]
13 stable_anchor: [] 13 stable_anchor: []
14 version_bound: [10.5.1] 14 version_bound: [10.5.1]
15 related_docs: [01-installation-guide.md, 71-error-handling-guide.md, 72-version-issues-guide.md, 78-release-maintenance-checklist.md] 15 related_docs: [01-installation-guide.md, 71-error-handling-guide.md, 72-version-issues-guide.md, 78-release-maintenance-checklist.md]
16 related_files: [admin/environment_api.core.php, admin/update_api.core.php, config/t2_compat.php, config/t2_utf8.php, config/upload_config.php, integration/cms/adapters/gnuboard5.php, integration/cms/adapters/rhymix.php, integration/cms/adapters/standalone.php, integration/cms/adapters/wordpress.php, readme.txt] 16 related_files: [admin/environment_api.core.php, admin/update_api.core.php, config/t2_compat.php, config/t2_utf8.php, config/upload_config.php, integration/cms/adapters/gnuboard5.php, integration/cms/adapters/rhymix.php, integration/cms/adapters/standalone.php, integration/cms/adapters/wordpress.php, readme.txt]
17 related_functions: [t2u_current_version, get_readme_version, t2env_local_status, t2editor_detect_cms, t2_utf8_has_mb_provider] 17 related_functions: [t2u_current_version, get_readme_version, t2env_local_status, t2editor_detect_cms, t2_utf8_has_mb_provider]
18 related_classes_modules: [t2u, t2env, t2_utf8, t2editor_cms] 18 related_classes_modules: [t2u, t2env, t2_utf8, t2editor_cms]
19 related_features: [판별법, PHP 요구사항, CMS 연동, PHP 확장, 데이터 경로, EOL] 19 related_features: [판별법, PHP 요구사항, CMS 연동, PHP 확장, 데이터 경로, EOL]
20 related_ui: [관리자 페이지, 에디터 하단 진단 패널] 20 related_ui: [관리자 페이지, 에디터 하단 진단 패널]
21 change_risk: 판본이 바뀌면 매트릭스 전체가 낡으므로 현행판 배포 때마다 갱신해야 합니다. 21 change_risk: 판본이 바뀌면 매트릭스 전체가 낡으므로 현행판 배포 때마다 갱신해야 합니다.
22 reading_order: 07 22 reading_order: 07
23 summary: T2Editor 94개 판본의 상태, PHP 요구사항, CMS 연동, PHP 확장을 현행판 10.5.1 기준으로 정리한 호환 매트릭스 23 summary: T2Editor 94개 판본의 상태, PHP 요구사항, CMS 연동, PHP 확장을 현행판 10.5.1 기준으로 정리한 호환 매트릭스
24 description: 현행판 10.5.1(2026-07-27) 기준 판본별 상태·PHP 요구·CMS 연동·PHP 확장 매트릭스. 근거가 없는 칸은 미확인으로 둡니다. 24 description: 현행판 10.5.1(2026-07-27) 기준 판본별 상태·PHP 요구·CMS 연동·PHP 확장 매트릭스. 근거가 없는 칸은 미확인으로 둡니다.
25 tags: [version, compatibility, T2Editor, 매트릭스, PHP, CMS, EOL] 25 tags: [version, compatibility, T2Editor, 매트릭스, PHP, CMS, EOL]
26 version_tag: 10.5.1 26 version_tag: 10.5.1
27 maintenance_difficulty: Medium 27 maintenance_difficulty: Medium
28 test_requirement: Medium 28 test_requirement: Medium
29 ai_agent_risk: Medium 29 ai_agent_risk: Medium
30 source_basis: [현재 코드 분석 기반, 공식 릴리즈 노트 기반, 공식 배포 판본 목록 기반] 30 source_basis: [현재 코드 분석 기반, 공식 릴리즈 노트 기반, 공식 배포 판본 목록 기반]
31 beginner_section_included: true 31 beginner_section_included: true
32 webmaster_section_included: true 32 webmaster_section_included: true
33 developer_section_included: true 33 developer_section_included: true
34 --- 34 ---
35   35  
36 # 버전 호환성 매트릭스 (현행판 10.5.1 기준) 36 # 버전 호환성 매트릭스 (현행판 10.5.1 기준)
37   37  
38 > **이 문서는 2026-09-28에 다시 썼습니다.** 38 > **이 문서는 2026-09-28에 다시 썼습니다.**
39 > 원본은 `target_editor_version: 9.0.0` 기준이었고, 버전표가 9.0.0(2026-04-07)에서 멈춰 있었습니다. 39 > 원본은 `target_editor_version: 9.0.0` 기준이었고, 버전표가 9.0.0(2026-04-07)에서 멈춰 있었습니다.
40 > 그 사이 v10 계열 9개 판본이 나왔습니다. **그 구간이 이 문서의 공백이었습니다.** 40 > 그 사이 v10 계열 9개 판본이 나왔습니다. **그 구간이 이 문서의 공백이었습니다.**
41   41  
42 ## 0. 한 줄 요약 42 ## 0. 한 줄 요약
43   43  
44 | | | 44 | | |
45 |---|---| 45 |---|---|
46 | **현행 공개 판본** | **10.5.1 (2026-07-27)** | 46 | **현행 공개 판본** | **10.5.1 (2026-07-27)** |
47 | **EOL** | **v1 ~ v9 (전부)** | 47 | **EOL** | **v1 ~ v9 (전부)** |
48 | **개발 중** | v11.0.0-beta1.0.0 (2026-09-07) · 별도 private 저장소 · 공개 배포 아님 | 48 | **개발 중** | v11.0.0-beta1.0.0 (2026-09-07) · 별도 private 저장소 · 공개 배포 아님 |
49 | **전체 판본 수** | 94개 (v11 베타 포함) | 49 | **전체 판본 수** | 94개 (v11 베타 포함) |
50 | **최소 PHP** | **7.4.0** — 8.0은 필수가 아닙니다 | 50 | **최소 PHP** | **7.4.0** — 8.0은 필수가 아닙니다 |
51 | **자동 설치 자리** | 그누보드5 · 라이믹스 · 독립 실행 3곳 (워드프레스는 브리지) | 51 | **자동 설치 자리** | 그누보드5 · 라이믹스 · 독립 실행 3곳 (워드프레스는 브리지) |
52   52  
53 --- 53 ---
54   54  
55 ## 1. 판본별 상태 매트릭스 55 ## 1. 판본별 상태 매트릭스
56   56  
57 계열 11개 · 합계 94개. 배포일은 `all-versions.json` 원문 값이며 일자 표기가 80/94건이 `2026.03.26` 같은 점 형식입니다(표기 혼재는 아래 6절). 57 계열 11개 · 합계 94개. 배포일은 `all-versions.json` 원문 값이며 일자 표기가 80/94건이 `2026.03.26` 같은 점 형식입니다(표기 혼재는 아래 6절).
58   58  
59 | 계열 | 판본 수 | 첫 판본 | 최종판 | 최종판일 | 계열 수명 | 상태 | 판본 존재 근거 | 59 | 계열 | 판본 수 | 첫 판본 | 최종판 | 최종판일 | 계열 수명 | 상태 | 판본 존재 근거 |
60 |---|:-:|---|---|---|:-:|---|---| 60 |---|:-:|---|---|---|:-:|---|---|
61 | v1 | 19 | 1.0.0-beta | 1.6.3 | 2025-05-01 | 90일 | **EOL** | S1b + `T2Editor-v1` 설명 `[EOL]` | 61 | v1 | 19 | 1.0.0-beta | 1.6.3 | 2025-05-01 | 90일 | **EOL** | S1b + `T2Editor-v1` 설명 `[EOL]` |
62 | v2 | 3 | 2.0.0_B | 2.0.0 | 2025-06-03 | 34일 | **EOL** | S1b + `T2Editor-v2` `[EOL]` | 62 | v2 | 3 | 2.0.0_B | 2.0.0 | 2025-06-03 | 34일 | **EOL** | S1b + `T2Editor-v2` `[EOL]` |
63 | v3 | 10 | 3.0.0 | 3.0.9 | 2025-10-06 | 122일 | **EOL** | S1b + `T2Editor-v3` `[EOL]` | 63 | v3 | 10 | 3.0.0 | 3.0.9 | 2025-10-06 | 122일 | **EOL** | S1b + `T2Editor-v3` `[EOL]` |
64 | v4 | 3 | 4.0.0 | 4.0.2 | 2025-10-08 | 2일 | **EOL** | S1b + `T2Editor-v4` `[EOL]` | 64 | v4 | 3 | 4.0.0 | 4.0.2 | 2025-10-08 | 2일 | **EOL** | S1b + `T2Editor-v4` `[EOL]` |
65 | v5 | 32 | 5.1.0-beta1.0.2 | 5.10.0 | 2025-12-08 | 62일 | **EOL** | S1b + `T2Editor-v5` `[EOL]` | 65 | v5 | 32 | 5.1.0-beta1.0.2 | 5.10.0 | 2025-12-08 | 62일 | **EOL** | S1b + `T2Editor-v5` `[EOL]` |
66 | v6 | 1 | 6.0.0 | 6.0.0 | 2025-12-09 | 1일 | **EOL** | S1b + `T2Editor-v6` `[EOL]` | 66 | v6 | 1 | 6.0.0 | 6.0.0 | 2025-12-09 | 1일 | **EOL** | S1b + `T2Editor-v6` `[EOL]` |
67 | v7 | 3 | 7.0.0 | 7.0.2 | 2025-12-19 | 6일 | **EOL** | S1b + `T2Editor-v7` `[EOL]` | 67 | v7 | 3 | 7.0.0 | 7.0.2 | 2025-12-19 | 6일 | **EOL** | S1b + `T2Editor-v7` `[EOL]` |
68 | v8 | 6 | 8.0.0 | 8.2.0 | 2026-03-26 | 87일 | **EOL** | S1b + `T2Editor-v8` `[EOL]` | 68 | v8 | 6 | 8.0.0 | 8.2.0 | 2026-03-26 | 87일 | **EOL** | S1b + `T2Editor-v8` `[EOL]` |
69 | v9 | 7 | 9.0.0 | 9.3.0 | 2026-05-29 | 53일 | **EOL** | S1b + `T2Editor-v9` `[EOL]` | 69 | v9 | 7 | 9.0.0 | 9.3.0 | 2026-05-29 | 53일 | **EOL** | S1b + `T2Editor-v9` `[EOL]` |
70 | **v10** | **9** | 10.0.0 | **10.5.1** | **2026-07-27** | 34일 | **현행 공개** | S1 `current_public` + `T2Editor-v10` 설명 `계열 상태 현행 공개 판본` | 70 | **v10** | **9** | 10.0.0 | **10.5.1** | **2026-07-27** | 34일 | **현행 공개** | S1 `current_public` + `T2Editor-v10` 설명 `계열 상태 현행 공개 판본` |
71 | v11 | 1 | 11.0.0-beta1.0.0 | — | 2026-09-07 | — | **개발 중(비공개)** | S1 `in_dev` + `gh api` 결과 `private: true` | 71 | v11 | 1 | 11.0.0-beta1.0.0 | — | 2026-09-07 | — | **개발 중(비공개)** | S1 `in_dev` + `gh api` 결과 `private: true` |
72   72  
73 ### 1-1. 계열 EOL 표기의 실측 위치 — 릴리즈 노트에는 없습니다 73 ### 1-1. 계열 EOL 표기의 실측 위치 — 릴리즈 노트에는 없습니다
74   74  
75 계열이 끝났다는 표시는 **94개 릴리즈 노트 어디에도 계열 단위로는 없습니다.** 실제로 측정한 결과: 75 계열이 끝났다는 표시는 **94개 릴리즈 노트 어디에도 계열 단위로는 없습니다.** 실제로 측정한 결과:
76   76  
77 - 94개 릴리즈 노트(description) 전문 스캔 → 계열 단위 EOL 공지 **0/10 계열** 77 - 94개 릴리즈 노트(description) 전문 스캔 → 계열 단위 EOL 공지 **0/10 계열**
78 - 94개 title 스캔 → 계열 단위 EOL 공지 **0건** (1건은 15일 뒤 대체된 베타 `1.0.0-beta`의 제목 주석) 78 - 94개 title 스캔 → 계열 단위 EOL 공지 **0건** (1건은 15일 뒤 대체된 베타 `1.0.0-beta`의 제목 주석)
79 - **`EOL` 문자열은 GitHub 아카이브 저장소 설명에만 있습니다.** `tak2-08/T2Editor-v1` ~ `T2Editor-v9` 9개 저장소 설명이 각각 `[EOL] T2Editor vN 계열 배포본 N개 … · 계열 상태 EOL` 형식입니다. v10 저장소 설명에는 `[EOL]` 이 없고 `계열 상태 현행 공개 판본` 입니다. 79 - **`EOL` 문자열은 GitHub 아카이브 저장소 설명에만 있습니다.** `tak2-08/T2Editor-v1` ~ `T2Editor-v9` 9개 저장소 설명이 각각 `[EOL] T2Editor vN 계열 배포본 N개 … · 계열 상태 EOL` 형식입니다. v10 저장소 설명에는 `[EOL]` 이 없고 `계열 상태 현행 공개 판본` 입니다.
80 - 업그레이드 위험 신호를 릴리즈 노트에서 찾으려고 하면 `주의` **0/94**, `breaking` **0/94** 입니다. 80 - 업그레이드 위험 신호를 릴리즈 노트에서 찾으려고 하면 `주의` **0/94**, `breaking` **0/94** 입니다.
81 - ⚠ 위 EOL 저장소 9개는 **2026-09-27 당일 일괄 생성**되었습니다. 즉 최초 0일, 최대 18개월 사후 고지입니다. 81 - ⚠ 위 EOL 저장소 9개는 **2026-09-27 당일 일괄 생성**되었습니다. 즉 최초 0일, 최대 18개월 사후 고지입니다.
82   82  
83 **따라서 EOL 판정은 배포 노트를 읽어서 알 수 없습니다.** 이 표를 보십시오. 83 **따라서 EOL 판정은 배포 노트를 읽어서 알 수 없습니다.** 이 표를 보십시오.
84   84  
85 ### 1-2. 이 위키가 94판본 중 9개(9.6%)만 알고 있었습니다 85 ### 1-2. 이 위키가 94판본 중 9개(9.6%)만 알고 있었습니다
86   86  
87 | | | 87 | | |
88 |---|---| 88 |---|---|
89 | v10 계열 9개 판본 중 이 위키가 언급한 것 | **0개 (0%)** | 89 | v10 계열 9개 판본 중 이 위키가 언급한 것 | **0개 (0%)** |
90 | 사용자 대상 15건 중 `target_editor_version: 9.0.0` | **15/15건 (100%)** | 90 | 사용자 대상 15건 중 `target_editor_version: 9.0.0` | **15/15건 (100%)** |
91 | 서버 메타(`version_tag`)가 빈 값인 문서 | **84건 중 82건** | 91 | 서버 메타(`version_tag`)가 빈 값인 문서 | **84건 중 82건** |
92   92  
93 서버가 보관하는 판본 정보가 비어 있으므로 **문서 frontmatter만이 유일한 판본 기록**입니다. 93 서버가 보관하는 판본 정보가 비어 있으므로 **문서 frontmatter만이 유일한 판본 기록**입니다.
94   94  
95 --- 95 ---
96   96  
97 ## 2. PHP 요구사항 — v10 안에서 바뀐 이력 (가장 자주 오독되는 지점) 97 ## 2. PHP 요구사항 — v10 안에서 바뀐 이력 (가장 자주 오독되는 지점)
98   98  
99 **v10 계열 안에서 PHP 요구사항이 두 번 뒤집혔습니다.** 릴리즈 노트만 읽으면 어느 쪽인지 알 수 없습니다. 99 **v10 계열 안에서 PHP 요구사항이 두 번 뒤집혔습니다.** 릴리즈 노트만 읽으면 어느 쪽인지 알 수 없습니다.
100   100  
101 | 판본 | 날짜 | 릴리즈 노트 원문 (verbatim) | 실제 의미 | 101 | 판본 | 날짜 | 릴리즈 노트 원문 (verbatim) | 실제 의미 |
102 |---|---|---|---| 102 |---|---|---|---|
103 | 10.0.0 | 2026-06-24 | `**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**` | **권장** 사양 상향. 최소 요건이 8.0으로 바뀐 게 아님 | 103 | 10.0.0 | 2026-06-24 | `**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**` | **권장** 사양 상향. 최소 요건이 8.0으로 바뀐 게 아님 |
104 | 10.0.1 | 2026-06-27 | `**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**` | 같은 문장이 반복됨 | 104 | 10.0.1 | 2026-06-27 | `**php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.**` | 같은 문장이 반복됨 |
105 | 10.1.0 | 2026-06-29 | `**php7.4 호환 추가!**` | **되돌림.** 7.4가 다시 정식 지원 범위 | 105 | 10.1.0 | 2026-06-29 | `**php7.4 호환 추가!**` | **되돌림.** 7.4가 다시 정식 지원 범위 |
106 | 10.5.0 | 2026-07-22 | `PHP 7.4부터 8.4까지의 호환 범위를 유지하면서, 일부 함수나 확장 기능이 없는 환경에서 전체 실행이 중단되지 않도록 대체 경로를 추가했습니다.` | 하한 7.4 고정, 대체 경로 추가 | 106 | 10.5.0 | 2026-07-22 | `PHP 7.4부터 8.4까지의 호환 범위를 유지하면서, 일부 함수나 확장 기능이 없는 환경에서 전체 실행이 중단되지 않도록 대체 경로를 추가했습니다.` | 하한 7.4 고정, 대체 경로 추가 |
107 | 10.5.1 | 2026-07-27 | (노트에 PHP 관련 문장 없음) | **코드가 최종 답을 줍니다** | 107 | 10.5.1 | 2026-07-27 | (노트에 PHP 관련 문장 없음) | **코드가 최종 답을 줍니다** |
108   108  
109 ### 2-1. 10.5.1 코드가 말하는 최종값 (권위 있는 값) 109 ### 2-1. 10.5.1 코드가 말하는 최종값 (권위 있는 값)
110   110  
111 | 항목 | 값 | 등급 | 근거 (`file:line`) | 111 | 항목 | 값 | 등급 | 근거 (`file:line`) |
112 |---|---|---|---| 112 |---|---|---|---|
113 | **최소 PHP** | **7.4.0** | `error` | `admin/environment_api.core.php:219` `version_compare(PHP_VERSION, '7.4.0', '>=')` | 113 | **최소 PHP** | **7.4.0** | `error` | `admin/environment_api.core.php:219` `version_compare(PHP_VERSION, '7.4.0', '>=')` |
114 | **권장 PHP** | **8.1 또는 8.2** | — | `admin/environment_api.core.php:240-241` `신규 운영 환경은 PHP 8.1 또는 8.2를 권장합니다.` | 114 | **권장 PHP** | **8.1 또는 8.2** | — | `admin/environment_api.core.php:240-241` `신규 운영 환경은 PHP 8.1 또는 8.2를 권장합니다.` |
115 | 기계가 읽는 사양 | `minimum: 7.4.0` / `tested_through: 8.2` / `curl_optional: true` / `ziparchive_optional: true` | — | `admin/update_api.core.php:2355` `'php_client' => array(...)` | 115 | 기계가 읽는 사양 | `minimum: 7.4.0` / `tested_through: 8.2` / `curl_optional: true` / `ziparchive_optional: true` | — | `admin/update_api.core.php:2355` `'php_client' => array(...)` |
116 | 필수 PHP 함수 9종 | `file_put_contents` `mkdir` `rename` `copy` `unlink` `hash_file` `json_encode` `json_decode` `random_bytes` | `error` | `admin/environment_api.core.php:152` | 116 | 필수 PHP 함수 9종 | `file_put_contents` `mkdir` `rename` `copy` `unlink` `hash_file` `json_encode` `json_decode` `random_bytes` | `error` | `admin/environment_api.core.php:152` |
117   117  
118 ### 2-2. 이 표에서 바로 답 나오는 질문 118 ### 2-2. 이 표에서 바로 답 나오는 질문
119   119  
120 > **Q. 서버 PHP가 7.4인데 10.5.1을 올려도 되나요?** 120 > **Q. 서버 PHP가 7.4인데 10.5.1을 올려도 되나요?**
121 > **A. 예.** 7.4.0이 10.5.1의 최소값이고 7.4는 정식 지원 범위에 포함됩니다. 10.0.0 노트의 "8.0 이상"은 **10.1.0에서 이미 되돌려졌습니다.** 서버를 8.0으로 올려야 할 이유가 이 문서 기준으로는 없습니다. 121 > **A. 예.** 7.4.0이 10.5.1의 최소값이고 7.4는 정식 지원 범위에 포함됩니다. 10.0.0 노트의 "8.0 이상"은 **10.1.0에서 이미 되돌려졌습니다.** 서버를 8.0으로 올려야 할 이유가 이 문서 기준으로는 없습니다.
122   122  
123 > **Q. 그럼 10.0.0 → 10.1.0 사이(2주)에 8.0으로 올린 서버는?** 123 > **Q. 그럼 10.0.0 → 10.1.0 사이(2주)에 8.0으로 올린 서버는?**
124 > **A.** 되돌릴 필요가 없습니다. 7.4 경로가 살아 있고, 8.0 이상에서만 깨지는 코드가 이 문서 기준으로는 없습니다. **[확인 필요]** — 10.0.0~10.0.1에서 8.0+ 전용 API를 쓴 흔적은 10.5.1 코드로 역추적할 수 없습니다(10.0.0 판본 실물 미확보). 124 > **A.** 되돌릴 필요가 없습니다. 7.4 경로가 살아 있고, 8.0 이상에서만 깨지는 코드가 이 문서 기준으로는 없습니다. **[확인 필요]** — 10.0.0~10.0.1에서 8.0+ 전용 API를 쓴 흔적은 10.5.1 코드로 역추적할 수 없습니다(10.0.0 판본 실물 미확보).
125   125  
126 > **Q. PHP 8.4에서도 되나요?** 126 > **Q. PHP 8.4에서도 되나요?**
127 > **A. 미확인.** 릴리즈 노트는 "7.4부터 8.4까지"라 하고 코드가 노출하는 사양은 `tested_through: 8.2` 입니다. **두 1차 근거가 다릅니다.** 8.3~8.4에서 실제로 검증됐는지는 이 문서로 답할 수 없습니다. 운영 환경이라면 8.2를 권장합니다(진단 코드도 8.1/8.2를 권장). 127 > **A. 미확인.** 릴리즈 노트는 "7.4부터 8.4까지"라 하고 코드가 노출하는 사양은 `tested_through: 8.2` 입니다. **두 1차 근거가 다릅니다.** 8.3~8.4에서 실제로 검증됐는지는 이 문서로 답할 수 없습니다. 운영 환경이라면 8.2를 권장합니다(진단 코드도 8.1/8.2를 권장).
128   128  
129 > **Q. PHP 8.5 이상은?** 129 > **Q. PHP 8.5 이상은?**
130 > **A. 미확인.** 어느 1차 근거에도 8.5 언급이 없습니다. 130 > **A. 미확인.** 어느 1차 근거에도 8.5 언급이 없습니다.
131   131  
132 > **Q. `disable_functions`에 뭘 빼놓으면 안 되나요?** 132 > **Q. `disable_functions`에 뭘 빼놓으면 안 되나요?**
133 > **A.** 위 9종. 하나라도 빠지면 업데이트·설치가 `error` 로 멈춥니다. 진단 화면이 정확한 함수명을 알려 줍니다. 133 > **A.** 위 9종. 하나라도 빠지면 업데이트·설치가 `error` 로 멈춥니다. 진단 화면이 정확한 함수명을 알려 줍니다.
134   134  
135 > **Q. `max_execution_time` / `memory_limit`?** 135 > **Q. `max_execution_time` / `memory_limit`?**
136 > **A.** 각각 120초 이상 / 128M 이상을 권장하며 `warning` 등급입니다(설치 차단 아님). `admin/environment_api.core.php:169-190`. 136 > **A.** 각각 120초 이상 / 128M 이상을 권장하며 `warning` 등급입니다(설치 차단 아님). `admin/environment_api.core.php:169-190`.
137   137  
138 --- 138 ---
139   139  
140 ## 3. CMS 연동 매트릭스 (v10.5.1 코드 실측) 140 ## 3. CMS 연동 매트릭스 (v10.5.1 코드 실측)
141   141  
142 판본이 자동으로 어떻게 결정되는지 `integration/cms/adapters/` 네 개가 답합니다. 142 판본이 자동으로 어떻게 결정되는지 `integration/cms/adapters/` 네 개가 답합니다.
143   143  
144 | CMS | 설치 경로 | 자동 감지 근거 (실측) | 감지 우선순위 | 데이터 경로 | 관리자 인증 | 144 | CMS | 설치 경로 | 자동 감지 근거 (실측) | 감지 우선순위 | 데이터 경로 | 관리자 인증 |
145 |---|---|---|:-:|---|---| 145 |---|---|---|:-:|---|---|
146 | **그누보드5** | `<g5>/plugin/editor/t2editor/` | 편집기 폴더가 `<root>/plugin/editor` 안 + `config.php`·`common.php`·`lib/common.lib.php` 3개 존재 + `config.php`에 `_GNUBOARD_` 정의 | 300 (1순위) | 미디어 `<g5>/data/editor` · 내부 데이터 `<g5>/data/t2editor_db` | CMS 관리자 로그인 **또는** 자체 비밀번호 (10.5.1부터) | 146 | **그누보드5** | `<g5>/plugin/editor/t2editor/` | 편집기 폴더가 `<root>/plugin/editor` 안 + `config.php`·`common.php`·`lib/common.lib.php` 3개 존재 + `config.php`에 `_GNUBOARD_` 정의 | 300 (1순위) | 미디어 `<g5>/data/editor` · 내부 데이터 `<g5>/data/t2editor_db` | CMS 관리자 로그인 **또는** 자체 비밀번호 (10.5.1부터) |
147 | **라이믹스** | `<rx>/modules/editor/skins/t2editor/` | 편집기 폴더가 `<root>/modules/editor/skins` 안 + `config/config.inc.php` 존재 + (`common/autoload.php` **또는** `defaults/config.php` **또는** `common/defaults/config.php`) | 250 (2순위) | `<rx>/files` | 동일 | 147 | **라이믹스** | `<rx>/modules/editor/skins/t2editor/` | 편집기 폴더가 `<root>/modules/editor/skins` 안 + `config/config.inc.php` 존재 + (`common/autoload.php` **또는** `defaults/config.php` **또는** `common/defaults/config.php`) | 250 (2순위) | `<rx>/files` | 동일 |
148 | **독립 실행** | 웹에서 보이는 아무 폴더 | 위 둘 어디에도 걸리지 않으면 **항상** 최종 fallback | −1000 (최후) | `<에디터폴더>/data` | 자체 비밀번호 필수 | 148 | **독립 실행** | 웹에서 보이는 아무 폴더 | 위 둘 어디에도 걸리지 않으면 **항상** 최종 fallback | −1000 (최후) | `<에디터폴더>/data` | 자체 비밀번호 필수 |
149 | **워드프레스** | **설치 자리가 아님** | — (환경 감지 판정 함수가 **항상 `false`** 반환) | 200 (우선순위 있으나 감지 안 됨) | 워드프레스 미디어 라이브러리 경유 | 워드프레스 capability | 149 | **워드프레스** | **설치 자리가 아님** | — (환경 감지 판정 함수가 **항상 `false`** 반환) | 200 (우선순위 있으나 감지 안 됨) | 워드프레스 미디어 라이브러리 경유 | 워드프레스 capability |
150   150  
151 근거: `integration/cms/adapters/gnuboard5.php:9-14, 96-98, 113-130` · `rhymix.php:9-14, 152-161` · `standalone.php:5-12` · `wordpress.php:3, 90-96` 151 근거: `integration/cms/adapters/gnuboard5.php:9-14, 96-98, 113-130` · `rhymix.php:9-14, 152-161` · `standalone.php:5-12` · `wordpress.php:3, 90-96`
152   152  
153 ### 3-1. ⭐ 워드프레스는 "지원한다"가 아니라 "브리지만 준다" 153 ### 3-1. ⭐ 워드프레스는 "지원한다"가 아니라 "브리지만 준다"
154   154  
155 이 행은 이전 문서에서 오독되기 쉬웠으므로 코드 원문으로 적습니다. 155 이 행은 이전 문서에서 오독되기 쉬웠으므로 코드 원문으로 적습니다.
156   156  
157 - `integration/cms/adapters/wordpress.php:3` 원문 주석: 157 - `integration/cms/adapters/wordpress.php:3` 원문 주석:
158 > `워드프레스는 설치환경 감지가 아니라 선택적 업로드·브라우저 브리지 capability만 제공한다.` 158 > `워드프레스는 설치환경 감지가 아니라 선택적 업로드·브라우저 브리지 capability만 제공한다.`
159 - `integration/cms/adapters/wordpress.php:93` — `'validate_context' => function () { return false; }` 159 - `integration/cms/adapters/wordpress.php:93` — `'validate_context' => function () { return false; }`
160 ⇒ 워드프레스 어댑터는 **환경 감지에서 한 번도 선택되지 않습니다.** 160 ⇒ 워드프레스 어댑터는 **환경 감지에서 한 번도 선택되지 않습니다.**
161   161  
162 그래서 워드프레스 사용자가 받는 것과 받지 못하는 것: 162 그래서 워드프레스 사용자가 받는 것과 받지 못하는 것:
163   163  
164 | | 워드프레스에서 v10.5.1이 제공 | 근거 | 164 | | 워드프레스에서 v10.5.1이 제공 | 근거 |
165 |---|---|---| 165 |---|---|---|
166 | ✅ | 워드프레스 미디어 라이브러리(`media_handle_upload`)를 거치는 업로드 | `wordpress.php:33-60` | 166 | ✅ | 워드프레스 미디어 라이브러리(`media_handle_upload`)를 거치는 업로드 | `wordpress.php:33-60` |
167 | ✅ | 워드프레스 nonce(`_wpnonce`)·`upload_files` 권한·게시물 편집 권한 검증 | `wordpress.php:45-47` | 167 | ✅ | 워드프레스 nonce(`_wpnonce`)·`upload_files` 권한·게시물 편집 권한 검증 | `wordpress.php:45-47` |
168 | ✅ | 워드프레스 첫 화면에 붙은 `wp-load.php` 자동 로드 | `wordpress.php:16-27` | 168 | ✅ | 워드프레스 첫 화면에 붙은 `wp-load.php` 자동 로드 | `wordpress.php:16-27` |
169 | ❌ | CMS 관리자 로그인 연동 | 워드프레스는 어댑터가 CMS로 등록되지 않음 | 169 | ❌ | CMS 관리자 로그인 연동 | 워드프레스는 어댑터가 CMS로 등록되지 않음 |
170 | ❌ | 그누보드5·라이믹스식 데이터 경로 분리 | 같은 사유 | 170 | ❌ | 그누보드5·라이믹스식 데이터 경로 분리 | 같은 사유 |
171 | ❌ | T2Editor 자체 관리자 비밀번호 게이트의 CMS 연동 경로 | 같은 사유 | 171 | ❌ | T2Editor 자체 관리자 비밀번호 게이트의 CMS 연동 경로 | 같은 사유 |
172   172  
173 **워드프레스 최소 지원 판본: [확인 필요].** 릴리즈 노트 10.3.0에 "워드프레스 업로드 연동 지원"이라는 한 줄만 있고 최소 판본·최소 PHP 표기가 없습니다. 173 **워드프레스 최소 지원 판본: [확인 필요].** 릴리즈 노트 10.3.0에 "워드프레스 업로드 연동 지원"이라는 한 줄만 있고 최소 판본·최소 PHP 표기가 없습니다.
174   174  
175 ### 3-2. 그누보드5·라이믹스 최소 지원 판본: [확인 필요] 175 ### 3-2. 그누보드5·라이믹스 최소 지원 판본: [확인 필요]
176   176  
177 - 그누보드5 — 코드에는 `_GNUBOARD_` 정의가 있는지만 봅니다. **판본 하한을 검사하는 코드가 없습니다.** 8.x 판본 실물도 없어 v10 계열의 하한을 확정할 수 없습니다. 177 - 그누보드5 — 코드에는 `_GNUBOARD_` 정의가 있는지만 봅니다. **판본 하한을 검사하는 코드가 없습니다.** 8.x 판본 실물도 없어 v10 계열의 하한을 확정할 수 없습니다.
178 - 라이믹스 — 10.3.0 노트에 "라이믹스 2.1.x 호환성 추가"가 있습니다. 그 **이전** 판본에서 v10.5.1이 동작하는지에 대한 코드가 없습니다(`RX_VERSION` 분기 0건). 2.1.x 미만 지원 여부는 **[확인 필요]**. 178 - 라이믹스 — 10.3.0 노트에 "라이믹스 2.1.x 호환성 추가"가 있습니다. 그 **이전** 판본에서 v10.5.1이 동작하는지에 대한 코드가 없습니다(`RX_VERSION` 분기 0건). 2.1.x 미만 지원 여부는 **[확인 필요]**.
179   179  
180 ### 3-3. CMS별로 데이터가 쌓이는 곳이 다릅니다 (백업·옮길 때 필수) 180 ### 3-3. CMS별로 데이터가 쌓이는 곳이 다릅니다 (백업·옮길 때 필수)
181   181  
182 | 설치 자리 | 업로드 미디어 | 내부 데이터(관리자 설정·인증·협업·업데이트 기록) | 182 | 설치 자리 | 업로드 미디어 | 내부 데이터(관리자 설정·인증·협업·업데이트 기록) |
183 |---|---|---| 183 |---|---|---|
184 | 그누보드5 | `<g5>/data/editor` | `<g5>/data/t2editor_db` | 184 | 그누보드5 | `<g5>/data/editor` | `<g5>/data/t2editor_db` |
185 | 라이믹스 | `<rx>/files` (라이믹스 파일 모듈) | `<rx>/files` 하위 | 185 | 라이믹스 | `<rx>/files` (라이믹스 파일 모듈) | `<rx>/files` 하위 |
186 | 독립 실행 | `<에디터폴더>/data` | `<에디터폴더>/data/t2editor_db` | 186 | 독립 실행 | `<에디터폴더>/data` | `<에디터폴더>/data/t2editor_db` |
187   187  
188 **10.5.0에서 이 구조를 다시 정리했습니다** (10.5.1이 그누보드5 경로를 확정): 188 **10.5.0에서 이 구조를 다시 정리했습니다** (10.5.1이 그누보드5 경로를 확정):
189 - 10.5.0 — *"그누보드5에서는 data/editor, 라이믹스에서는 files, 독립 실행 환경에서는 T2Editor/data를 기준으로 데이터를 관리합니다. 업로드 미디어를 제외한 관리자 설정, 캐시, 협업 상태, 업데이트 상태 등의 내부 데이터는 t2editor_db 아래에 모아 CMS 데이터 폴더가 불필요하게 복잡해지지 않도록 했습니다. 기존 위치에 저장된 데이터와 경로 정보는 가능한 범위에서 새 구조로 이전하거나 계속 인식합니다."* 189 - 10.5.0 — *"그누보드5에서는 data/editor, 라이믹스에서는 files, 독립 실행 환경에서는 T2Editor/data를 기준으로 데이터를 관리합니다. 업로드 미디어를 제외한 관리자 설정, 캐시, 협업 상태, 업데이트 상태 등의 내부 데이터는 t2editor_db 아래에 모아 CMS 데이터 폴더가 불필요하게 복잡해지지 않도록 했습니다. 기존 위치에 저장된 데이터와 경로 정보는 가능한 범위에서 새 구조로 이전하거나 계속 인식합니다."*
190 - 10.5.1 — *"이미지와 첨부파일은 기존처럼 data/editor 폴더에 저장됩니다. 관리자 설정, 인증 정보, 협업 데이터, 업데이트 기록, 서드파티 설치 정보는 data/t2editor_db 폴더에 별도로 저장됩니다. 기존 data/editor/t2editor_db 데이터는 새 위치로 자동 이전됩니다."* 190 - 10.5.1 — *"이미지와 첨부파일은 기존처럼 data/editor 폴더에 저장됩니다. 관리자 설정, 인증 정보, 협업 데이터, 업데이트 기록, 서드파티 설치 정보는 data/t2editor_db 폴더에 별도로 저장됩니다. 기존 data/editor/t2editor_db 데이터는 새 위치로 자동 이전됩니다."*
191   191  
192 코드: `config/t2_storage.php:253-258` (이전 중첩 위치 `<데이터>/editor/t2editor_db` 인식), `:345-364` (실제 이전) 192 코드: `config/t2_storage.php:253-258` (이전 중첩 위치 `<데이터>/editor/t2editor_db` 인식), `:345-364` (실제 이전)
193   193  
194 ### 3-4. CMS 감지가 실패해 보일 때 (실측된 실패 패턴) 194 ### 3-4. CMS 감지가 실패해 보일 때 (실측된 실패 패턴)
195   195  
196 | 증상 | 원인 | 근거 | 196 | 증상 | 원인 | 근거 |
197 |---|---|---| 197 |---|---|---|
198 | CMS로 인식되지 않고 독립 실행으로 빠짐 | 위 표의 감지 조건 중 하나가 안 맞음 | `adapters/gnuboard5.php:9-14` | 198 | CMS로 인식되지 않고 독립 실행으로 빠짐 | 위 표의 감지 조건 중 하나가 안 맞음 | `adapters/gnuboard5.php:9-14` |
199 | 서브폴더 설치 + CMS 파일 구조가 겹침 | 10.5.0에서 수정됨 | 10.5.0 *"서브폴더 설치, T2Pack 데이터 슬롯 실행과 CMS 파일 구조가 겹치는 환경에서도 실제 T2Editor 설치 위치와 CMS 루트를 구분하도록 수정했습니다."* | 199 | 서브폴더 설치 + CMS 파일 구조가 겹침 | 10.5.0에서 수정됨 | 10.5.0 *"서브폴더 설치, T2Pack 데이터 슬롯 실행과 CMS 파일 구조가 겹치는 환경에서도 실제 T2Editor 설치 위치와 CMS 루트를 구분하도록 수정했습니다."* |
200 | 한 CMS 어댑터 오류가 다른 기능까지 전파 | 10.5.0에서 분리함 | 10.5.0 *"CMS 어댑터 하나에서 오류가 발생해도 다른 환경의 처리나 일반 에디터 기능으로 오류가 전파되지 않도록 했습니다."* | 200 | 한 CMS 어댑터 오류가 다른 기능까지 전파 | 10.5.0에서 분리함 | 10.5.0 *"CMS 어댑터 하나에서 오류가 발생해도 다른 환경의 처리나 일반 에디터 기능으로 오류가 전파되지 않도록 했습니다."* |
201 | 그누보드5 관리자인데도 "관리자 로그인 필요" 안내 | 10.5.0에서 발생, **10.5.1에서 수정** | 10.5.1 *"그누보드5 로그인 정보를 불러오는 위치가 적절하지 않아 관리자 상태가 정상적으로 전달되지 않는 것이 원인이었습니다."* | 201 | 그누보드5 관리자인데도 "관리자 로그인 필요" 안내 | 10.5.0에서 발생, **10.5.1에서 수정** | 10.5.1 *"그누보드5 로그인 정보를 불러오는 위치가 적절하지 않아 관리자 상태가 정상적으로 전달되지 않는 것이 원인이었습니다."* |
202   202  
203 --- 203 ---
204   204  
205 ## 4. PHP 확장 매트릭스 (v10.5.1 · PHP 파일 86개 전수 검색) 205 ## 4. PHP 확장 매트릭스 (v10.5.1 · PHP 파일 86개 전수 검색)
206   206  
207 검색 범위: `releases/v10.5.1` 트리의 `.php` **86개 전부**. grep 0건은 "쓰지 않는다"는 뜻이지 "설치해도 된다"는 보장은 아닙니다. 207 검색 범위: `releases/v10.5.1` 트리의 `.php` **86개 전부**. grep 0건은 "쓰지 않는다"는 뜻이지 "설치해도 된다"는 보장은 아닙니다.
208   208  
209 | 확장 / 기능 | 쓰이는 곳 (전수 grep) | 판정 | 등급 | 근거 | 209 | 확장 / 기능 | 쓰이는 곳 (전수 grep) | 판정 | 등급 | 근거 |
210 |---|---|---|---|---| 210 |---|---|---|---|---|
211 | **json** (`json_encode`/`json_decode`) | 필수 함수 목록 | **필수** | `error` | `admin/environment_api.core.php:152` | 211 | **json** (`json_encode`/`json_decode`) | 필수 함수 목록 | **필수** | `error` | `admin/environment_api.core.php:152` |
212 | **disable_functions 9종** | `admin/environment_api.core.php:152` | **필수** | `error` | 위 목록 | 212 | **disable_functions 9종** | `admin/environment_api.core.php:152` | **필수** | `error` | 위 목록 |
213 | **cURL** | 업데이트는 `curl` 또는 `openssl+allow_url_fopen`로 대체 가능. **서드파티 마켓 설치는 cURL 반드시 필요** | **조건부 필수** | `error` | `admin/environment_api.core.php:222-223, 256-266, 288-297` | 213 | **cURL** | 업데이트는 `curl` 또는 `openssl+allow_url_fopen`로 대체 가능. **서드파티 마켓 설치는 cURL 반드시 필요** | **조건부 필수** | `error` | `admin/environment_api.core.php:222-223, 256-266, 288-297` |
214 | **OpenSSL + `allow_url_fopen`** | cURL 대체 전송 경로 | **조건부 필수** | `error` (조합) | `admin/environment_api.core.php:222-223` | 214 | **OpenSSL + `allow_url_fopen`** | cURL 대체 전송 경로 | **조건부 필수** | `error` (조합) | `admin/environment_api.core.php:222-223` |
215 | **zip (ZipArchive)** | 6개 파일. 없으면 `gzinflate`(zlib) → 그것도 없으면 관리자 브라우저 보조 해제 | **선택** | `warning` | `admin/environment_api.core.php:223-224, 267-280` / 10.5.0 | 215 | **zip (ZipArchive)** | 6개 파일. 없으면 `gzinflate`(zlib) → 그것도 없으면 관리자 브라우저 보조 해제 | **선택** | `warning` | `admin/environment_api.core.php:223-224, 267-280` / 10.5.0 |
216 | **zlib (`gzinflate`)** | ZipArchive 대체 | **조건부** | `warning` | `admin/environment_api.core.php:224` | 216 | **zlib (`gzinflate`)** | ZipArchive 대체 | **조건부** | `warning` | `admin/environment_api.core.php:224` |
217 | **mbstring** | **polyfill만 존재**(`config/t2_compat.php`·`config/t2_utf8.php` 전수 grep 1파일) | **선택** | — | `config/t2_compat.php:10-45`, `config/t2_utf8.php:9-16, 30-40` / 10.5.0 *"mbstring 확장이 없는 서버에서도 iconv 또는 UTF-8 대체 처리로 주요 문자열 기능을 사용할 수 있도록 보완했습니다."* | 217 | **mbstring** | **polyfill만 존재**(`config/t2_compat.php`·`config/t2_utf8.php` 전수 grep 1파일) | **선택** | — | `config/t2_compat.php:10-45`, `config/t2_utf8.php:9-16, 30-40` / 10.5.0 *"mbstring 확장이 없는 서버에서도 iconv 또는 UTF-8 대체 처리로 주요 문자열 기능을 사용할 수 있도록 보완했습니다."* |
218 | **iconv** | 3개 파일 (`config/t2_utf8.php`, `admin/api.core.php`, `admin/index.core.php`) | **선택** (mbstring 대체 제공자) | — | 전수 grep | 218 | **iconv** | 3개 파일 (`config/t2_utf8.php`, `admin/api.core.php`, `admin/index.core.php`) | **선택** (mbstring 대체 제공자) | — | 전수 grep |
219 | **gd** | `plugin/image/image_upload.core.php` **단 1개 파일**. WebP 변환 전용이며, 없으면 검증된 원본을 그대로 저장 | **선택** | — | `plugin/image/image_upload.core.php:237-260` (가드 `:249`) | 219 | **gd** | `plugin/image/image_upload.core.php` **단 1개 파일**. WebP 변환 전용이며, 없으면 검증된 원본을 그대로 저장 | **선택** | — | `plugin/image/image_upload.core.php:237-260` (가드 `:249`) |
220 | **imagick** | **86파일 0건** | **미사용** | — | 전수 grep | 220 | **imagick** | **86파일 0건** | **미사용** | — | 전수 grep |
221 | **fileinfo** | **86파일 0건** (`finfo_open` 0건). 주석 2건이 오히려 "불필요"를 명시 | **미사용** | — | `config/upload_config.php:32` *"server-side identification uses signatures so Fileinfo is not required."* `:83` *"server validation uses signatures without Fileinfo."* | 221 | **fileinfo** | **86파일 0건** (`finfo_open` 0건). 주석 2건이 오히려 "불필요"를 명시 | **미사용** | — | `config/upload_config.php:32` *"server-side identification uses signatures so Fileinfo is not required."* `:83` *"server validation uses signatures without Fileinfo."* |
222 | **dom (ext-dom)** | **`plugin/linkcard/linkcard_fetch.core.php` 단 1개 파일** | **링크 미리보기 카드에서만 필요** | **[확인 필요]** | `:230-238` `new DOMDocument()`. `class_exists('DOMDocument')` 가드 **0건**, 호출은 `:434` 에서 무조건. → **확장 부재 시 이 경로 폴백 코드가 없습니다.** | 222 | **dom (ext-dom)** | **`plugin/linkcard/linkcard_fetch.core.php` 단 1개 파일** | **링크 미리보기 카드에서만 필요** | **[확인 필요]** | `:230-238` `new DOMDocument()`. `class_exists('DOMDocument')` 가드 **0건**, 호출은 `:434` 에서 무조건. → **확장 부재 시 이 경로 폴백 코드가 없습니다.** |
223 | `max_execution_time` ≥ 120 | 진단 | 권장 | `warning` | `admin/environment_api.core.php:169-180` | 223 | `max_execution_time` ≥ 120 | 진단 | 권장 | `warning` | `admin/environment_api.core.php:169-180` |
224 | `memory_limit` ≥ 128M | 진단 | 권장 | `warning` | `admin/environment_api.core.php:182-190` | 224 | `memory_limit` ≥ 128M | 진단 | 권장 | `warning` | `admin/environment_api.core.php:182-190` |
225   225  
226 ### 4-1. ⭐ "이 조합에선 안 된다"고 말할 수 있는 칸 226 ### 4-1. ⭐ "이 조합에선 안 된다"고 말할 수 있는 칸
227   227  
228 기존 문서가 댓글에서 발견하도록 방치했던 부분을 여기서 고백합니다. 228 기존 문서가 댓글에서 발견하도록 방치했던 부분을 여기서 고백합니다.
229   229  
230 > **1. ext-dom이 없으면 "링크 미리보기 카드"가 위험합니다.** 230 > **1. ext-dom이 없으면 "링크 미리보기 카드"가 위험합니다.**
231 > v10.5.1의 링크 미리보기 카드는 웹 페이지를 받아 `new DOMDocument()` 로 파싱합니다. **확장 존재 검사가 코드에 없습니다.** ext-dom이 없는 서버에서 이 경로가 도달하면 어떻게 되는지는 런타임에서 재현하지 않았으므로 **[확인 필요]** 로 둡니다. 다만 **폴백 코드가 없다는 것**은 확인했습니다(전수 grep `class_exists('DOMDocument')` 0건). 231 > v10.5.1의 링크 미리보기 카드는 웹 페이지를 받아 `new DOMDocument()` 로 파싱합니다. **확장 존재 검사가 코드에 없습니다.** ext-dom이 없는 서버에서 이 경로가 도달하면 어떻게 되는지는 런타임에서 재현하지 않았으므로 **[확인 필요]** 로 둡니다. 다만 **폴백 코드가 없다는 것**은 확인했습니다(전수 grep `class_exists('DOMDocument')` 0건).
232 > 우회: 그 기능이 필요 없다면 끄면 됩니다. 필요하면 서버 관리자에게 ext-dom 설치를 요청하십시오. 232 > 우회: 그 기능이 필요 없다면 끄면 됩니다. 필요하면 서버 관리자에게 ext-dom 설치를 요청하십시오.
233   233  
234 > **2. cURL도 없고 OpenSSL도 없는 서버는 업데이트·서드파티 설치가 막힙니다.** 234 > **2. cURL도 없고 OpenSSL도 없는 서버는 업데이트·서드파티 설치가 막힙니다.**
235 > 코드가 `error` 로 판정합니다. ZIP 처리에 브라우저 폴백이 있는 것과 **파일을 내려받는 수송 경로가 막힌 것**은 다른 문제입니다. 브라우저 보조 해제는 ZIP을 여는 단계의 대체일 뿐, 원본 ZIP을 받아올 수송 자체는 못 대체합니다. 235 > 코드가 `error` 로 판정합니다. ZIP 처리에 브라우저 폴백이 있는 것과 **파일을 내려받는 수송 경로가 막힌 것**은 다른 문제입니다. 브라우저 보조 해제는 ZIP을 여는 단계의 대체일 뿐, 원본 ZIP을 받아올 수송 자체는 못 대체합니다.
236   236  
237 > **3. mbstring도 iconv도 없는 서버의 문자열 처리 정확도는 [확인 필요]입니다.** 237 > **3. mbstring도 iconv도 없는 서버의 문자열 처리 정확도는 [확인 필요]입니다.**
238 > v10.5.1은 "UTF-8 대체 처리" 경로를 넣었습니다(`config/t2_utf8.php`). **그 경로가 mbstring과 같은 결과를 내는지 이 문서에서는 재현하지 않았습니다.** 정확한 문자가 필요한 곳(예: 파일명 바이트 단위 처리)에서 문제가 생길 수 있다는 뜻이며, 실제로 생기는지는 미확인입니다. 238 > v10.5.1은 "UTF-8 대체 처리" 경로를 넣었습니다(`config/t2_utf8.php`). **그 경로가 mbstring과 같은 결과를 내는지 이 문서에서는 재현하지 않았습니다.** 정확한 문자가 필요한 곳(예: 파일명 바이트 단위 처리)에서 문제가 생길 수 있다는 뜻이며, 실제로 생기는지는 미확인입니다.
239   239  
240 > **4. GD가 없으면 WebP 변환이 안 됩니다 — 업로드 자체는 됩니다.** 240 > **4. GD가 없으면 WebP 변환이 안 됩니다 — 업로드 자체는 됩니다.**
241 > GIF/WebP는 변환 없이 원본 저장, JPEG/PNG/BMP는 GD가 있을 때만 WebP로 변환하고 없으면 원본 확장자로 저장합니다. **따라서 "GD가 없다"는 이유로 업로드가 실패하면 안 됩니다.** 실패한다면 원인은 GD가 아니라 권한·확장자·용량입니다. 241 > GIF/WebP는 변환 없이 원본 저장, JPEG/PNG/BMP는 GD가 있을 때만 WebP로 변환하고 없으면 원본 확장자로 저장합니다. **따라서 "GD가 없다"는 이유로 업로드가 실패하면 안 됩니다.** 실패한다면 원인은 GD가 아니라 권한·확장자·용량입니다.
242   242  
243 > **5. 그누보드5가 관리자라는데 CMS 로그인이 안 되면 10.5.1에서도 남아 있는 경로가 있습니다.** 243 > **5. 그누보드5가 관리자라는데 CMS 로그인이 안 되면 10.5.1에서도 남아 있는 경로가 있습니다.**
244 > 10.5.1 자체 로그인이 생겼으므로, CMS 인증이 실패해도 `admin/t2admin.key` 활성화 + 자체 비밀번호로 관리자 페이지에 들어갈 수 있습니다. 244 > 10.5.1 자체 로그인이 생겼으므로, CMS 인증이 실패해도 `admin/t2admin.key` 활성화 + 자체 비밀번호로 관리자 페이지에 들어갈 수 있습니다.
245   245  
246 --- 246 ---
247   247  
248 ## 5. 권한·설치 방식 매트릭스 (v10.5.1) 248 ## 5. 권한·설치 방식 매트릭스 (v10.5.1)
249   249  
250 | 항목 | 값 | 근거 | 250 | 항목 | 값 | 근거 |
251 |---|---|---| 251 |---|---|---|
252 | 데이터 경로 최소 권장 권한 | **707** | `extend/js/t2_first_run_guide.js:33, 66` / 10.5.0 | 252 | 데이터 경로 최소 권장 권한 | **707** | `extend/js/t2_first_run_guide.js:33, 66` / 10.5.0 |
253 | 777 | 동작은 하지만 **권장하지 않음** | `t2_first_run_guide.js:33, 37, 67` / 10.5.0 | 253 | 777 | 동작은 하지만 **권장하지 않음** | `t2_first_run_guide.js:33, 37, 67` / 10.5.0 |
254 | 쓰기 권한을 줄 곳 | **공용 데이터 경로 하나만** | `t2_first_run_guide.js:427` *"T2Editor 원본 코드, plugin, extend, locales 전체를 쓰기 가능하게 만들지 마세요."* | 254 | 쓰기 권한을 줄 곳 | **공용 데이터 경로 하나만** | `t2_first_run_guide.js:427` *"T2Editor 원본 코드, plugin, extend, locales 전체를 쓰기 가능하게 만들지 마세요."* |
255 | 숫자보다 시험 | 실제 PHP 파일 생성·쓰기·삭제 시험이 통과하면 **현재 권한 유지** | `t2_first_run_guide.js:67` / 10.5.0 | 255 | 숫자보다 시험 | 실제 PHP 파일 생성·쓰기·삭제 시험이 통과하면 **현재 권한 유지** | `t2_first_run_guide.js:67` / 10.5.0 |
256 | 설치 방식 기본값 | `data` 슬롯 방식(에디터 폴더를 쓰지 않고 공용 데이터 쪽에 설치) | `admin/environment_api.core.php:192-201` `t2env_install_mode()` 기본값 `data` | 256 | 설치 방식 기본값 | `data` 슬롯 방식(에디터 폴더를 쓰지 않고 공용 데이터 쪽에 설치) | `admin/environment_api.core.php:192-201` `t2env_install_mode()` 기본값 `data` |
257 | 설치 방식 선택 | `direct`(원본 폴더 직접 교체)도 가능. 관리자 → 업데이트 | 10.4.0 *"원래 폴더에 직접 업데이트하는 방식도 선택할 수 있는데"* | 257 | 설치 방식 선택 | `direct`(원본 폴더 직접 교체)도 가능. 관리자 → 업데이트 | 10.4.0 *"원래 폴더에 직접 업데이트하는 방식도 선택할 수 있는데"* |
258 | 최초 설치 게이트 | `admin/t2admin.key.txt` → `admin/t2admin.key` 이름 변경 + 관리자 비밀번호 + 쓰기 시험 + 안내 완독. **통과 전까지 편집 잠김** | `t2_first_run_guide.js:19, 307` / 10.4.0, 10.5.1 | 258 | 최초 설치 게이트 | `admin/t2admin.key.txt` → `admin/t2admin.key` 이름 변경 + 관리자 비밀번호 + 쓰기 시험 + 안내 완독. **통과 전까지 편집 잠김** | `t2_first_run_guide.js:19, 307` / 10.4.0, 10.5.1 |
259 | 루트 `collab` 폴더 | **만들지 마십시오.** 협업 데이터는 `data/t2editor_db/collab` | tree 349항목에서 `collab`는 `data/t2editor_db/collab` 와 `plugin/collab` 두 갈래뿐 | 259 | 루트 `collab` 폴더 | **만들지 마십시오.** 협업 데이터는 `data/t2editor_db/collab` | tree 349항목에서 `collab`는 `data/t2editor_db/collab` 와 `plugin/collab` 두 갈래뿐 |
260   260  
261 > ⚠ **775를 넣지 마십시오.** 775는 v11 계약입니다(`T2Editor v11` 설치 문서 기준). **v10 계약은 707입니다.** 판본이 다르면 계약이 다릅니다. 261 > ⚠ **775를 넣지 마십시오.** 775는 v11 계약입니다(`T2Editor v11` 설치 문서 기준). **v10 계약은 707입니다.** 판본이 다르면 계약이 다릅니다.
262   262  
263 --- 263 ---
264   264  
265 ## 6. 데이터 그 자체에 관한 주의 (사용자 영향이 큽니다) 265 ## 6. 데이터 그 자체에 관한 주의 (사용자 영향이 큽니다)
266   266  
267 | 항목 | 실측 내용 | 근거 | 267 | 항목 | 실측 내용 | 근거 |
268 |---|---|---| 268 |---|---|---|
269 | 배포일 표기 혼재 | 94건 중 **80건(85.1%)** 이 `2026.03.26` 같은 점 형식. 2026-06-24 이후 14건만 `2026-06-24` 형식 | `all-versions.json` `release_date` 필드 전수 | 269 | 배포일 표기 혼재 | 94건 중 **80건(85.1%)** 이 `2026.03.26` 같은 점 형식. 2026-06-24 이후 14건만 `2026-06-24` 형식 | `all-versions.json` `release_date` 필드 전수 |
270 | 배포 파형 | 판본 수 대비 다운로드 수가 1배열(88/94건이 정확히 1) | `all-versions.json` `download_count` | 270 | 배포 파형 | 판본 수 대비 다운로드 수가 1배열(88/94건이 정확히 1) | `all-versions.json` `download_count` |
271 | 계열 수명 중앙값 | **42.5일**. 10계열 중 **9개가 90일 이내** 교체 | 계열별 수명 전수 계산 | 271 | 계열 수명 중앙값 | **42.5일**. 10계열 중 **9개가 90일 이내** 교체 | 계열별 수명 전수 계산 |
272 | 계열 전환 리듬 | 10회 중 **9회가 30일 이내** 전환 | 배포일 간격 전수 계산 | 272 | 계열 전환 리듬 | 10회 중 **9회가 30일 이내** 전환 | 배포일 간격 전수 계산 |
273 | 브레이킹체인지 공지 | `주의` **0/94**, `breaking` **0/94** | 릴리즈 노트 전문 스캔 | 273 | 브레이킹체인지 공지 | `주의` **0/94**, `breaking` **0/94** | 릴리즈 노트 전문 스캔 |
274 | 업그레이드 요약표 | 94판본 역사에서 릴리즈 노트 안의 업그레이드 영향 요약은 **0건** | 릴리즈 노트 전문 스캔 | 274 | 업그레이드 요약표 | 94판본 역사에서 릴리즈 노트 안의 업그레이드 영향 요약은 **0건** | 릴리즈 노트 전문 스캔 |
275   275  
276 **이 표가 뜻하는 것**: v10 계열도 34일 만에 9판본으로 교체되며, 계열이 끝날 때 이를 알리는 신호가 릴리즈 노트에 없습니다. **5절의 판본표가 유일한 안내지입니다.** 업그레이드 전에 이 문서를 다시 확인하십시오. 276 **이 표가 뜻하는 것**: v10 계열도 34일 만에 9판본으로 교체되며, 계열이 끝날 때 이를 알리는 신호가 릴리즈 노트에 없습니다. **5절의 판본표가 유일한 안내지입니다.** 업그레이드 전에 이 문서를 다시 확인하십시오.
277   277  
278 > ⚠ **또한, 10.0.0에는 업그레이드 영향 요약표가 없습니다.** 10.0.0은 아키텍처를 바꿨는데도 "이렇게 오르지 마라"는 안내가 없습니다. v9 → v10 이관이 필요한 사람은 [[N-03-migration-v9-to-v10.md]]를 보십시오. 278 > ⚠ **또한, 10.0.0에는 업그레이드 영향 요약표가 없습니다.** 10.0.0은 아키텍처를 바꿨는데도 "이렇게 오르지 마라"는 안내가 없습니다. v9 → v10 이관이 필요한 사람은 [[N-03-migration-v9-to-v10.md]]를 보십시오.
279   279  
280 --- 280 ---
281   281  
282 ## 7. 판본을 확인하는 방법 (v10.5.1 실측 4가지) 282 ## 7. 판본을 확인하는 방법 (v10.5.1 실측 4가지)
283   283  
284 `readme.txt` 안에 **버전 숫자가 두 개** 있습니다. 먼저 그 구분이 필요합니다. 284 `readme.txt` 안에 **버전 숫자가 두 개** 있습니다. 먼저 그 구분이 필요합니다.
285   285  
286 | # | 방법 | 무엇을 보는가 | 근거 | 286 | # | 방법 | 무엇을 보는가 | 근거 |
287 |:-:|---|---|---| 287 |:-:|---|---|---|
288 | 1 | 배포판 루트 `readme.txt` **2행** | `ver_10.5.1` ← **에디터 판본** | `readme.txt:2` / 판독 코드 `editor.core.php:415-422` `get_readme_version()` = `preg_match('/ver_([0-9.]+)/')` | 288 | 1 | 배포판 루트 `readme.txt` **2행** | `ver_10.5.1` ← **에디터 판본** | `readme.txt:2` / 판독 코드 `editor.core.php:415-422` `get_readme_version()` = `preg_match('/ver_([0-9.]+)/')` |
289 | 2 | 에디터 하단 버전 정보 클릭 → 진단 패널 | 실행 환경·미디어 블록 크기·저장 필드 | `editor.core.php:553` / 10.3.0 노트 | 289 | 2 | 에디터 하단 버전 정보 클릭 → 진단 패널 | 실행 환경·미디어 블록 크기·저장 필드 | `editor.core.php:553` / 10.3.0 노트 |
290 | 3 | 관리자 페이지 버전 정보 (로그인 필요) | `get_readme_version()` 반환값 | `admin/api.core.php:464` | 290 | 3 | 관리자 페이지 버전 정보 (로그인 필요) | `get_readme_version()` 반환값 | `admin/api.core.php:464` |
291 | 4 | 관리자 페이지 → 업데이트 | 새 판본 존재 여부 | `admin/update_api.core.php:2434` | 291 | 4 | 관리자 페이지 → 업데이트 | 새 판본 존재 여부 | `admin/update_api.core.php:2434` |
292   292  
293 > ⚠ **`readme.txt`의 `Version: 3.0.0` 은 에디터 버전이 아닙니다.** `readme.txt:11` 의 `Version: 3.0.0` 은 **라이선스 계약 판본**입니다(`:70` 영어 절에도 동일). 에디터 판본은 같은 파일 2행의 `ver_` 값입니다. **이 둘을 혼동하면 안 됩니다.** 293 > ⚠ **`readme.txt`의 `Version: 3.0.0` 은 에디터 버전이 아닙니다.** `readme.txt:11` 의 `Version: 3.0.0` 은 **라이선스 계약 판본**입니다(`:70` 영어 절에도 동일). 에디터 판본은 같은 파일 2행의 `ver_` 값입니다. **이 둘을 혼동하면 안 됩니다.**
294   294  
295 ### 7-1. 배포판에 없는 파일 (알려진 혼동) 295 ### 7-1. 배포판에 없는 파일 (알려진 혼동)
296   296  
297 | 존재하지 않음 | 실물 위치 | 297 | 존재하지 않음 | 실물 위치 |
298 |---|---| 298 |---|---|
299 | `license.txt` / `license_en.txt` / `license_kr.txt` | 라이선스는 `readme.txt` 한 파일 안에 한·영 두 언어로 있음 | 299 | `license.txt` / `license_en.txt` / `license_kr.txt` | 라이선스는 `readme.txt` 한 파일 안에 한·영 두 언어로 있음 |
300 | `version.txt` | 배포판 트리에 없음. 자동 판독의 후보 경로 중 하나일 뿐 | 300 | `version.txt` | 배포판 트리에 없음. 자동 판독의 후보 경로 중 하나일 뿐 |
301 | `update-manifest.json` | 업데이트 시 생성. 배포판에 없음 | 301 | `update-manifest.json` | 업데이트 시 생성. 배포판에 없음 |
302 | 루트 `collab/` | `data/t2editor_db/collab` + `plugin/collab` | 302 | 루트 `collab/` | `data/t2editor_db/collab` + `plugin/collab` |
303 | `endpoints/` | v10에는 없음(루트 `t2_css_min.php` 1개) | 303 | `endpoints/` | v10에는 없음(루트 `t2_css_min.php` 1개) |
304 | `config/t2_sanitize.php` | v11 전용 | 304 | `config/t2_sanitize.php` | v11 전용 |
305   305  
306 ### 7-2. 라이선스 검증이 실제로 무엇을 비교하는가 306 ### 7-2. 라이선스 검증이 실제로 무엇을 비교하는가
307   307  
308 `editor.core.php:396-404` — `readme.txt`의 한글 조항·영문 조항·파일 참조 정보 각 해시를 내장 기대값과 `hash_equals` 로 비교합니다. 즉 **판본별 라이선스 파일이 아니라 파일 내용 대조 방식**입니다. `readme.txt`를 직접 편집하면 인증이 깨집니다. 308 `editor.core.php:396-404` — `readme.txt`의 한글 조항·영문 조항·파일 참조 정보 각 해시를 내장 기대값과 `hash_equals` 로 비교합니다. 즉 **판본별 라이선스 파일이 아니라 파일 내용 대조 방식**입니다. `readme.txt`를 직접 편집하면 인증이 깨집니다.
309   309  
310 --- 310 ---
311   311  
312 ## 8. v11 을 준비한다면 (v10에 없는 것 — 사실 목록) 312 ## 8. v11 을 준비한다면 (v10에 없는 것 — 사실 목록)
313   313  
314 v11은 **2026-09-07 베타이고 별도 private 저장소이며 공개 배포판이 아닙니다.** 그래서 이 목록은 "지금 쓰라"는 권고가 아니라 "v10에서 찾지 못하시면 그것도 이유입니다"라는 설명입니다. 314 v11은 **2026-09-07 베타이고 별도 private 저장소이며 공개 배포판이 아닙니다.** 그래서 이 목록은 "지금 쓰라"는 권고가 아니라 "v10에서 찾지 못하시면 그것도 이유입니다"라는 설명입니다.
315   315  
316 | v11에 있는 것 | v10.5.1 실측 | 316 | v11에 있는 것 | v10.5.1 실측 |
317 |---|---| 317 |---|---|
318 | 서버단 XSS 필터(`T2Esanhtml()`, `config/t2_sanitize.php`, `integration/sanitize/providers/`) | **없음** — 트리에 파일 없음, PHP 86파일 전수 grep 0건 | 318 | 서버단 XSS 필터(`T2Esanhtml()`, `config/t2_sanitize.php`, `integration/sanitize/providers/`) | **없음** — 트리에 파일 없음, PHP 86파일 전수 grep 0건 |
319 | 발행 본문 스타일 번들(`endpoints/t2_css_min.php?bundle=content`, 로더 JS, `T2Econtentstyleattach()`) | **없음** — 루트 `t2_css_min.php`는 단일 파일 축소기. 4개 심볼 grep 0건 | 319 | 발행 본문 스타일 번들(`endpoints/t2_css_min.php?bundle=content`, 로더 JS, `T2Econtentstyleattach()`) | **없음** — 루트 `t2_css_min.php`는 단일 파일 축소기. 4개 심볼 grep 0건 |
320 | 호스트 보안 capability 표(`config/t2_cms_security.php`, `T2Ehostsecuritysnapshot()`) | **없음** — grep 0건 | 320 | 호스트 보안 capability 표(`config/t2_cms_security.php`, `T2Ehostsecuritysnapshot()`) | **없음** — grep 0건 |
321 | ext-dom·fileinfo를 요구사항으로 안내 | v10.5.1은 둘 다 미사용 (4절) | 321 | ext-dom·fileinfo를 요구사항으로 안내 | v10.5.1은 둘 다 미사용 (4절) |
322   322  
323 > **주의**: 이 목록 때문에 "v10이 안전하지 않다"고 읽으면 오독입니다. **이 문서는 v10 안에서 고르는 문서이지, v11을 권하는 문서가 아닙니다.** v10을 쓰는 분은 3절·4절의 매트릭스가 답입니다. 323 > **주의**: 이 목록 때문에 "v10이 안전하지 않다"고 읽으면 오독입니다. **이 문서는 v10 안에서 고르는 문서이지, v11을 권하는 문서가 아닙니다.** v10을 쓰는 분은 3절·4절의 매트릭스가 답입니다.
324   324  
325 --- 325 ---
326   326  
327 ## 9. 미확인 칸 목록 (근거가 없어 지어내지 않은 것) 327 ## 9. 미확인 칸 목록 (근거가 없어 지어내지 않은 것)
328   328  
329 이 문서에 남긴 `미확인` / `[확인 필요]` 전부입니다. 지어낸 값은 없습니다. 329 이 문서에 남긴 `미확인` / `[확인 필요]` 전부입니다. 지어낸 값은 없습니다.
330   330  
331 | # | 항목 | 왜 미확인인가 | 채우는 방법 | 331 | # | 항목 | 왜 미확인인가 | 채우는 방법 |
332 |:-:|---|---|---| 332 |:-:|---|---|---|
333 | 1 | PHP 8.4 실지원 여부 | 릴리즈 노트는 "7.4~8.4", 코드는 `tested_through: 8.2` — 1차 근거 2개가 서로 다름 | 8.4 서버에서 v10.5.1 실제 설치·글쓰기 | 333 | 1 | PHP 8.4 실지원 여부 | 릴리즈 노트는 "7.4~8.4", 코드는 `tested_through: 8.2` — 1차 근거 2개가 서로 다름 | 8.4 서버에서 v10.5.1 실제 설치·글쓰기 |
334 | 2 | PHP 8.5 이상 | 어느 1차 근거에도 언급 없음 | 동일 | 334 | 2 | PHP 8.5 이상 | 어느 1차 근거에도 언급 없음 | 동일 |
335 | 3 | 그누보드5 최소 지원 판본 | 코드에 판-version 검사가 없고 v9 이하 실물 소스 없음 | 그누보드5 각 판본 환경에서 v10.5.1 설치 시험 | 335 | 3 | 그누보드5 최소 지원 판본 | 코드에 판-version 검사가 없고 v9 이하 실물 소스 없음 | 그누보드5 각 판본 환경에서 v10.5.1 설치 시험 |
336 | 4 | 라이믹스 최소 지원 판본 | 10.3.0이 "2.1.x 호환 추가", 그 이전 분기 코드 없음 | 2.1.x 이전 환경 시험 | 336 | 4 | 라이믹스 최소 지원 판본 | 10.3.0이 "2.1.x 호환 추가", 그 이전 분기 코드 없음 | 2.1.x 이전 환경 시험 |
337 | 5 | 워드프레스 최소 지원 판본·PHP | 10.3.0 한 줄 외 표기 없음 | 워드프레스 환경에서 브리지 업로드 시험 | 337 | 5 | 워드프레스 최소 지원 판본·PHP | 10.3.0 한 줄 외 표기 없음 | 워드프레스 환경에서 브리지 업로드 시험 |
338 | 6 | ext-dom 부재 시 링크 미리보기 카드 동작 | 폴백 코드 0건은 확인, 실제 동작은 재현 안 함 | ext-dom 제거 환경에서 링크 주소 붙여넣기 | 338 | 6 | ext-dom 부재 시 링크 미리보기 카드 동작 | 폴백 코드 0건은 확인, 실제 동작은 재현 안 함 | ext-dom 제거 환경에서 링크 주소 붙여넣기 |
339 | 7 | mbstring+iconv 동시 부재 시 문자열 처리 정확도 | 대체 경로 존재는 확인, 결과 동일성은 미측정 | 두 확장을 끈 서버에서 한글 파일명 업로드 | 339 | 7 | mbstring+iconv 동시 부재 시 문자열 처리 정확도 | 대체 경로 존재는 확인, 결과 동일성은 미측정 | 두 확장을 끈 서버에서 한글 파일명 업로드 |
340 | 8 | v9 이하 판본의 PHP 요구사항 | 8.x·9.x 실물 소스 미확보 | `releases/v9.3.0` 등 브랜치 트리 확인 | 340 | 8 | v9 이하 판본의 PHP 요구사항 | 8.x·9.x 실물 소스 미확보 | `releases/v9.3.0` 등 브랜치 트리 확인 |
341 | 9 | v9 → v10 커스텀 플러그인 hook API 1:1 대응표 | v9 실물 소스 없음 | 두 판본 트리 병렬 대조 | 341 | 9 | v9 → v10 커스텀 플러그인 hook API 1:1 대응표 | v9 실물 소스 없음 | 두 판본 트리 병렬 대조 |
342 | 10 | v9의 `collab` 폴더 구조·권한 계약 | v9 실물 소스 없음 | 동일 | 342 | 10 | v9의 `collab` 폴더 구조·권한 계약 | v9 실물 소스 없음 | 동일 |
343 | 11 | 8.x 라이선스 누락 사례의 진실 | 8.x 실물 소스 없음 | 동일 | 343 | 11 | 8.x 라이선스 누락 사례의 진실 | 8.x 실물 소스 없음 | 동일 |
344 | 12 | 5.7.2 라이선스 정책 변경 내용 | 판본은 실존하나 변경 내용 1차 근거 없음 | 5.7.2 `readme.txt` 원문 대조 | 344 | 12 | 5.7.2 라이선스 정책 변경 내용 | 판본은 실존하나 변경 내용 1차 근거 없음 | 5.7.2 `readme.txt` 원문 대조 |
345 | 13 | 10.0.0~10.0.1에서 8.0+ 전용 API 사용 여부 | 그 판본 실물 미확보 | 해당 브랜치 트리 | 345 | 13 | 10.0.0~10.0.1에서 8.0+ 전용 API 사용 여부 | 그 판본 실물 미확보 | 해당 브랜치 트리 |
346 | 14 | 배포 파형(download_count=1)의 행위 주체 | 판본 목록만으로는 판정 불가 | — (기존 문서의 해석 금지 문구를 따름) | 346 | 14 | 배포 파형(download_count=1)의 행위 주체 | 판본 목록만으로는 판정 불가 | — (기존 문서의 해석 금지 문구를 따름) |
347 | 15 | 워드프레스 어댑터 우선순위 200의 실효성 | 감지 함수가 항상 `false` 라 관측 불가 | 코드 변경 이력 확인 | 347 | 15 | 워드프레스 어댑터 우선순위 200의 실효성 | 감지 함수가 항상 `false` 라 관측 불가 | 코드 변경 이력 확인 |
348   348  
349 --- 349 ---
350   350  
351   351  
352 ## N-xx 번호 체계 메모 (2026-09-28 확정) 352 ## N-xx 번호 체계 메모 (2026-09-28 확정)
353   353  
354 이 위키의 `N-` 번호는 2026-09-28에 등록부를 확정하면서 붙였습니다. 확정된 신규 문서는 **4건**입니다. 354 이 위키의 `N-` 번호는 2026-09-28에 등록부를 확정하면서 붙였습니다. 확정된 신규 문서는 **4건**입니다.
355   355  
356 | 번호 | 슬러그 | 내용 | 356 | 번호 | 슬러그 | 내용 |
357 |---|---|---| 357 |---|---|---|
358 | N-02 | `N-02-admin-console-guide.md` | 통합 관리 페이지 가이드 | 358 | N-02 | `N-02-admin-console-guide.md` | 통합 관리 페이지 가이드 |
359 | N-03 | `N-03-migration-v9-to-v10.md` | v9 → v10 이관 안내서 | 359 | N-03 | `N-03-migration-v9-to-v10.md` | v9 → v10 이관 안내서 |
360 | N-05 | `N-05-cms-adapter-and-data-paths.md` | CMS 어댑터와 데이터 저장 위치 | 360 | N-05 | `N-05-cms-adapter-and-data-paths.md` | CMS 어댑터와 데이터 저장 위치 |
361 | N-06 | `N-06-server-sanitize-and-content-style.md` | 서버측 본문 정제와 게시 화면 스타일 | 361 | N-06 | `N-06-server-sanitize-and-content-style.md` | 서버측 본문 정제와 게시 화면 스타일 |
362   362  
363 **`N-01` · `N-04` · `N-07`은 비어 있습니다.** 번호를 미리 예약하면 그 번호가 "예정된 문서가 있다"는 뜻으로 읽히고, 실제로 그런 문서가 생기지 않으면 독자가 찾다 포기합니다. 필요해지는 시점에 그때 번호를 쓰십시오. 이전 문안에서 `[[N-08-admin-console-guide]]`·`[[N-06-rhymix-integration-guide]]`처럼 가리키던 링크는 이 등록부 기준으로 교정되었습니다(N-08 → N-02, 라이믹스 경로는 N-05에 포함). 363 **`N-01` · `N-04` · `N-07`은 비어 있습니다.** 번호를 미리 예약하면 그 번호가 "예정된 문서가 있다"는 뜻으로 읽히고, 실제로 그런 문서가 생기지 않으면 독자가 찾다 포기합니다. 필요해지는 시점에 그때 번호를 쓰십시오. 이전 문안에서 `[[N-02-admin-console-guide.md]]`·`[[N-05-cms-adapter-and-data-paths.md]]`처럼 가리키던 링크는 이 등록부 기준으로 교정되었습니다(N-08 → N-02, 라이믹스 경로는 N-05에 포함).
364   364  
365 ## 10. 참고 자료 365 ## 10. 참고 자료
366   366  
367 - 공식 배포판 목록(94판본): 이 위키 내부 데이터 `all-versions.json` 367 - 공식 배포판 목록(94판본): 이 위키 내부 데이터 `all-versions.json`
368 - 공식 릴리즈 노트(v10 9건 전문): 이 위키 내부 데이터 `v10-release-notes.json` 368 - 공식 릴리즈 노트(v10 9건 전문): 이 위키 내부 데이터 `v10-release-notes.json`
369 - 배포판 실물: `tak2-08/T2Editor-v10` 저장소 · 브랜치 `releases/v10.5.1` 369 - 배포판 실물: `tak2-08/T2Editor-v10` 저장소 · 브랜치 `releases/v10.5.1`
370 - 계열 상태: `tak2-08/T2Editor-v1` ~ `T2Editor-v11` 저장소 설명 370 - 계열 상태: `tak2-08/T2Editor-v1` ~ `T2Editor-v11` 저장소 설명
371 - v11 설치·연동 문서: `T2Editor v11` `guide.txt` (v10 항목이 아님을 구분하는 용도로만 인용) 371 - v11 설치·연동 문서: `T2Editor v11` `guide.txt` (v10 항목이 아님을 구분하는 용도로만 인용)
372 - 판본별 이슈 대응: [[72-version-issues-guide.md]] 372 - 판본별 이슈 대응: [[72-version-issues-guide.md]]
373 - 최초 설치 절차: [[01-installation-guide.md]] 373 - 최초 설치 절차: [[01-installation-guide.md]]
374 - 오류 대응: [[71-error-handling-guide.md]] 374 - 오류 대응: [[71-error-handling-guide.md]]
375 - v9 → v10 이관: [[N-03-migration-v9-to-v10.md]] 375 - v9 → v10 이관: [[N-03-migration-v9-to-v10.md]]
376   376  
377 --- 377 ---
378   378  
379 ## 11. 문서 관리 메모 379 ## 11. 문서 관리 메모
380   380  
381 - 9절의 미확인 칸이 줄었다면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다. **칸을 지우지 말고 9절 표를 같이 고치십시오.** 381 - 9절의 미확인 칸이 줄었다면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다. **칸을 지우지 말고 9절 표를 같이 고치십시오.**
382   382  
383 - 이 문서는 **판본이 바뀌면 매트릭스 전체가 낡습니다.** 현행판이 바뀌면 1절·2절·7절을 먼저 고치고 나머지를 검토하십시오. 383 - 이 문서는 **판본이 바뀌면 매트릭스 전체가 낡습니다.** 현행판이 바뀌면 1절·2절·7절을 먼저 고치고 나머지를 검토하십시오.
384 - 6절 수치는 배포 판본 목록에서 기계로 다시 뽑을 수 있습니다. 사람이 옮겨 적지 마십시오. 384 - 6절 수치는 배포 판본 목록에서 기계로 다시 뽑을 수 있습니다. 사람이 옮겨 적지 마십시오.
385 - 어떤 칸에 `미확인`이 있으면 그 칸을 지우지 말고 §9 표를 함께 고치십시오. **지워지면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다.** 385 - 어떤 칸에 `미확인`이 있으면 그 칸을 지우지 말고 §9 표를 함께 고치십시오. **지워지면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다.**
386   386  
✏ 이 상태를 참고해 편집
T2WIKI · 기술 통합 위키 & 프로젝트 허브 · 나무위키 + Markdown 완벽 지원 · SQLite · PHP 8.2 · 소개 · 문법 안내