이 문서는 2026-09-28에 다시 썼습니다.
원본은 target_editor_version: 9.0.0 기준이었고, 버전표가 9.0.0(2026-04-07)에서 멈춰 있었습니다.그 사이 v10 계열 9개 판본이 나왔습니다. 그 구간이 이 문서의 공백이었습니다.
| 현행 공개 판본 | 10.5.1 (2026-07-27) |
| EOL | v1 ~ v9 (전부) |
| 개발 중 | v11.0.0-beta1.0.0 (2026-09-07) · 별도 private 저장소 · 공개 배포 아님 |
| 전체 판본 수 | 94개 (v11 베타 포함) |
| 최소 PHP | 7.4.0 — 8.0은 필수가 아닙니다 |
| 자동 설치 자리 | 그누보드5 · 라이믹스 · 독립 실행 3곳 (워드프레스는 브리지) |
계열 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 |
계열이 끝났다는 표시는 94개 릴리즈 노트 어디에도 계열 단위로는 없습니다. 실제로 측정한 결과:
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 판정은 배포 노트를 읽어서 알 수 없습니다. 이 표를 보십시오.
| v10 계열 9개 판본 중 이 위키가 언급한 것 | 0개 (0%) |
사용자 대상 15건 중 target_editor_version: 9.0.0 | 15/15건 (100%) |
서버 메타(version_tag)가 빈 값인 문서 | 84건 중 82건 |
서버가 보관하는 판본 정보가 비어 있으므로 문서 frontmatter만이 유일한 판본 기록입니다.
v10 계열 안에서 PHP 요구사항이 두 번 뒤집혔습니다. 릴리즈 노트만 읽으면 어느 쪽인지 알 수 없습니다.
| 판본 | 날짜 | 릴리즈 노트 원문 (verbatim) | 실제 의미 |
|---|---|---|---|
| 10.0.0 | 2026-06-24 | **php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.** | 권장 사양 상향. 최소 요건이 8.0으로 바뀐 게 아님 |
| 10.0.1 | 2026-06-27 | **php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.** | 같은 문장이 반복됨 |
| 10.1.0 | 2026-06-29 | **php7.4 호환 추가!** | 되돌림. 7.4가 다시 정식 지원 범위 |
| 10.5.0 | 2026-07-22 | PHP 7.4부터 8.4까지의 호환 범위를 유지하면서, 일부 함수나 확장 기능이 없는 환경에서 전체 실행이 중단되지 않도록 대체 경로를 추가했습니다. | 하한 7.4 고정, 대체 경로 추가 |
| 10.5.1 | 2026-07-27 | (노트에 PHP 관련 문장 없음) | 코드가 최종 답을 줍니다 |
| 항목 | 값 | 등급 | 근거 (file:line) |
|---|---|---|---|
| 최소 PHP | 7.4.0 | error | admin/environment_api.core.php:219 version_compare(PHP_VERSION, '7.4.0', '>=') |
| 권장 PHP | 8.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_bytes | error | admin/environment_api.core.php:152 |
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.
판본이 자동으로 어떻게 결정되는지 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
이 행은 이전 문서에서 오독되기 쉬웠으므로 코드 원문으로 적습니다.
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 표기가 없습니다.
_GNUBOARD_ 정의가 있는지만 봅니다. 판본 하한을 검사하는 코드가 없습니다. 8.x 판본 실물도 없어 v10 계열의 하한을 확정할 수 없습니다.RX_VERSION 분기 0건). 2.1.x 미만 지원 여부는 [확인 필요].| 설치 자리 | 업로드 미디어 | 내부 데이터(관리자 설정·인증·협업·업데이트 기록) |
|---|---|---|
| 그누보드5 | <g5>/data/editor | <g5>/data/t2editor_db |
| 라이믹스 | <rx>/files (라이믹스 파일 모듈) | <rx>/files 하위 |
| 독립 실행 | <에디터폴더>/data | <에디터폴더>/data/t2editor_db |
10.5.0에서 이 구조를 다시 정리했습니다 (10.5.1이 그누보드5 경로를 확정):
코드: config/t2_storage.php:253-258 (이전 중첩 위치 <데이터>/editor/t2editor_db 인식), :345-364 (실제 이전)
| 증상 | 원인 | 근거 |
|---|---|---|
| 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 로그인 정보를 불러오는 위치가 적절하지 않아 관리자 상태가 정상적으로 전달되지 않는 것이 원인이었습니다." |
검색 범위: releases/v10.5.1 트리의 .php 86개 전부. grep 0건은 "쓰지 않는다"는 뜻이지 "설치해도 된다"는 보장은 아닙니다.
| 확장 / 기능 | 쓰이는 곳 (전수 grep) | 판정 | 등급 | 근거 |
|---|---|---|---|---|
json (json_encode/json_decode) | 필수 함수 목록 | 필수 | error | admin/environment_api.core.php:152 |
| disable_functions 9종 | admin/environment_api.core.php:152 | 필수 | error | 위 목록 |
| cURL | 업데이트는 curl 또는 openssl+allow_url_fopen로 대체 가능. 서드파티 마켓 설치는 cURL 반드시 필요 | 조건부 필수 | error | admin/environment_api.core.php:222-223, 256-266, 288-297 |
OpenSSL + allow_url_fopen | cURL 대체 전송 경로 | 조건부 필수 | error (조합) | admin/environment_api.core.php:222-223 |
| zip (ZipArchive) | 6개 파일. 없으면 gzinflate(zlib) → 그것도 없으면 관리자 브라우저 보조 해제 | 선택 | warning | admin/environment_api.core.php:223-224, 267-280 / 10.5.0 |
zlib (gzinflate) | ZipArchive 대체 | 조건부 | warning | admin/environment_api.core.php:224 |
| 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 대체 처리로 주요 문자열 기능을 사용할 수 있도록 보완했습니다." |
| iconv | 3개 파일 (config/t2_utf8.php, admin/api.core.php, admin/index.core.php) | 선택 (mbstring 대체 제공자) | — | 전수 grep |
| gd | plugin/image/image_upload.core.php 단 1개 파일. WebP 변환 전용이며, 없으면 검증된 원본을 그대로 저장 | 선택 | — | plugin/image/image_upload.core.php:237-260 (가드 :249) |
| imagick | 86파일 0건 | 미사용 | — | 전수 grep |
| 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." |
| dom (ext-dom) | plugin/linkcard/linkcard_fetch.core.php 단 1개 파일 | 링크 미리보기 카드에서만 필요 | [확인 필요] | :230-238 new DOMDocument(). class_exists('DOMDocument') 가드 0건, 호출은 :434 에서 무조건. → 확장 부재 시 이 경로 폴백 코드가 없습니다. |
max_execution_time ≥ 120 | 진단 | 권장 | warning | admin/environment_api.core.php:169-180 |
memory_limit ≥ 128M | 진단 | 권장 | warning | admin/environment_api.core.php:182-190 |
기존 문서가 댓글에서 발견하도록 방치했던 부분을 여기서 고백합니다.
1. ext-dom이 없으면 "링크 미리보기 카드"가 위험합니다.
v10.5.1의 링크 미리보기 카드는 웹 페이지를 받아new DOMDocument()로 파싱합니다. 확장 존재 검사가 코드에 없습니다. ext-dom이 없는 서버에서 이 경로가 도달하면 어떻게 되는지는 런타임에서 재현하지 않았으므로 [확인 필요] 로 둡니다. 다만 폴백 코드가 없다는 것은 확인했습니다(전수 grepclass_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 활성화 + 자체 비밀번호로 관리자 페이지에 들어갈 수 있습니다.| 항목 | 값 | 근거 |
|---|---|---|
| 데이터 경로 최소 권장 권한 | 707 | extend/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/collab | tree 349항목에서 collab는 data/t2editor_db/collab 와 plugin/collab 두 갈래뿐 |
⚠ 775를 넣지 마십시오. 775는 v11 계약입니다(T2Editor v11 설치 문서 기준). v10 계약은 707입니다. 판본이 다르면 계약이 다릅니다.| 항목 | 실측 내용 | 근거 |
|---|---|---|
| 배포일 표기 혼재 | 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를 보십시오.
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_값입니다. 이 둘을 혼동하면 안 됩니다.
| 존재하지 않음 | 실물 위치 |
|---|---|
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.php | v11 전용 |
editor.core.php:396-404 — readme.txt의 한글 조항·영문 조항·파일 참조 정보 각 해시를 내장 기대값과 hash_equals 로 비교합니다. 즉 판본별 라이선스 파일이 아니라 파일 내용 대조 방식입니다. readme.txt를 직접 편집하면 인증이 깨집니다.
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절의 매트릭스가 답입니다.
이 문서에 남긴 미확인 / [확인 필요] 전부입니다. 지어낸 값은 없습니다.
| # | 항목 | 왜 미확인인가 | 채우는 방법 | |:-:|---|---|---| | 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- 번호는 2026-09-28에 등록부를 확정하면서 붙였습니다. 확정된 신규 문서는 4건입니다.
| 번호 | 슬러그 | 내용 |
|---|---|---|
| N-02 | N-02-admin-console-guide.md | 통합 관리 페이지 가이드 |
| N-03 | N-03-migration-v9-to-v10.md | v9 → v10 이관 안내서 |
| N-05 | N-05-cms-adapter-and-data-paths.md | CMS 어댑터와 데이터 저장 위치 |
| N-06 | N-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에 포함).
all-versions.jsonv10-release-notes.jsontak2-08/T2Editor-v10 저장소 · 브랜치 releases/v10.5.1tak2-08/T2Editor-v1 ~ T2Editor-v11 저장소 설명T2Editor v11 guide.txt (v10 항목이 아님을 구분하는 용도로만 인용)미확인이 있으면 그 칸을 지우지 말고 §9 표를 함께 고치십시오. 지워지면 "알려지지 않았다"가 "문제가 없다"로 읽힙니다.이 문서는 2026-09-28에 다시 썼습니다.
원본은 target_editor_version: 9.0.0 기준이었고, 버전표가 9.0.0(2026-04-07)에서 멈춰 있었습니다.그 사이 v10 계열 9개 판본이 나왔습니다. 그 구간이 이 문서의 공백이었습니다.
| 현행 공개 판본 | 10.5.1 (2026-07-27) |
| EOL | v1 ~ v9 (전부) |
| 개발 중 | v11.0.0-beta1.0.0 (2026-09-07) · 별도 private 저장소 · 공개 배포 아님 |
| 전체 판본 수 | 94개 (v11 베타 포함) |
| 최소 PHP | 7.4.0 — 8.0은 필수가 아닙니다 |
| 자동 설치 자리 | 그누보드5 · 라이믹스 · 독립 실행 3곳 (워드프레스는 브리지) |
계열 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 |
계열이 끝났다는 표시는 94개 릴리즈 노트 어디에도 계열 단위로는 없습니다. 실제로 측정한 결과:
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 판정은 배포 노트를 읽어서 알 수 없습니다. 이 표를 보십시오.
| v10 계열 9개 판본 중 이 위키가 언급한 것 | 0개 (0%) |
사용자 대상 15건 중 target_editor_version: 9.0.0 | 15/15건 (100%) |
서버 메타(version_tag)가 빈 값인 문서 | 84건 중 82건 |
서버가 보관하는 판본 정보가 비어 있으므로 문서 frontmatter만이 유일한 판본 기록입니다.
v10 계열 안에서 PHP 요구사항이 두 번 뒤집혔습니다. 릴리즈 노트만 읽으면 어느 쪽인지 알 수 없습니다.
| 판본 | 날짜 | 릴리즈 노트 원문 (verbatim) | 실제 의미 |
|---|---|---|---|
| 10.0.0 | 2026-06-24 | **php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.** | 권장 사양 상향. 최소 요건이 8.0으로 바뀐 게 아님 |
| 10.0.1 | 2026-06-27 | **php권장 사양이 기존 7.4에서 8.0 이상으로 변경되었습니다.** | 같은 문장이 반복됨 |
| 10.1.0 | 2026-06-29 | **php7.4 호환 추가!** | 되돌림. 7.4가 다시 정식 지원 범위 |
| 10.5.0 | 2026-07-22 | PHP 7.4부터 8.4까지의 호환 범위를 유지하면서, 일부 함수나 확장 기능이 없는 환경에서 전체 실행이 중단되지 않도록 대체 경로를 추가했습니다. | 하한 7.4 고정, 대체 경로 추가 |
| 10.5.1 | 2026-07-27 | (노트에 PHP 관련 문장 없음) | 코드가 최종 답을 줍니다 |
| 항목 | 값 | 등급 | 근거 (file:line) |
|---|---|---|---|
| 최소 PHP | 7.4.0 | error | admin/environment_api.core.php:219 version_compare(PHP_VERSION, '7.4.0', '>=') |
| 권장 PHP | 8.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_bytes | error | admin/environment_api.core.php:152 |
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.
판본이 자동으로 어떻게 결정되는지 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
이 행은 이전 문서에서 오독되기 쉬웠으므로 코드 원문으로 적습니다.
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 표기가 없습니다.
_GNUBOARD_ 정의가 있는지만 봅니다. 판본 하한을 검사하는 코드가 없습니다. 8.x 판본 실물도 없어 v10 계열의 하한을 확정할 수 없습니다.RX_VERSION 분기 0건). 2.1.x 미만 지원 여부는 [확인 필요].| 설치 자리 | 업로드 미디어 | 내부 데이터(관리자 설정·인증·협업·업데이트 기록) |
|---|---|---|
| 그누보드5 | <g5>/data/editor | <g5>/data/t2editor_db |
| 라이믹스 | <rx>/files (라이믹스 파일 모듈) | <rx>/files 하위 |
| 독립 실행 | <에디터폴더>/data | <에디터폴더>/data/t2editor_db |
10.5.0에서 이 구조를 다시 정리했습니다 (10.5.1이 그누보드5 경로를 확정):
코드: config/t2_storage.php:253-258 (이전 중첩 위치 <데이터>/editor/t2editor_db 인식), :345-364 (실제 이전)
| 증상 | 원인 | 근거 |
|---|---|---|
| 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 로그인 정보를 불러오는 위치가 적절하지 않아 관리자 상태가 정상적으로 전달되지 않는 것이 원인이었습니다." |
검색 범위: releases/v10.5.1 트리의 .php 86개 전부. grep 0건은 "쓰지 않는다"는 뜻이지 "설치해도 된다"는 보장은 아닙니다.
| 확장 / 기능 | 쓰이는 곳 (전수 grep) | 판정 | 등급 | 근거 |
|---|---|---|---|---|
json (json_encode/json_decode) | 필수 함수 목록 | 필수 | error | admin/environment_api.core.php:152 |
| disable_functions 9종 | admin/environment_api.core.php:152 | 필수 | error | 위 목록 |
| cURL | 업데이트는 curl 또는 openssl+allow_url_fopen로 대체 가능. 서드파티 마켓 설치는 cURL 반드시 필요 | 조건부 필수 | error | admin/environment_api.core.php:222-223, 256-266, 288-297 |
OpenSSL + allow_url_fopen | cURL 대체 전송 경로 | 조건부 필수 | error (조합) | admin/environment_api.core.php:222-223 |
| zip (ZipArchive) | 6개 파일. 없으면 gzinflate(zlib) → 그것도 없으면 관리자 브라우저 보조 해제 | 선택 | warning | admin/environment_api.core.php:223-224, 267-280 / 10.5.0 |
zlib (gzinflate) | ZipArchive 대체 | 조건부 | warning | admin/environment_api.core.php:224 |
| 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 대체 처리로 주요 문자열 기능을 사용할 수 있도록 보완했습니다." |
| iconv | 3개 파일 (config/t2_utf8.php, admin/api.core.php, admin/index.core.php) | 선택 (mbstring 대체 제공자) | — | 전수 grep |
| gd | plugin/image/image_upload.core.php 단 1개 파일. WebP 변환 전용이며, 없으면 검증된 원본을 그대로 저장 | 선택 | — | plugin/image/image_upload.core.php:237-260 (가드 :249) |
| imagick | 86파일 0건 | 미사용 | — | 전수 grep |
| 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." |
| dom (ext-dom) | plugin/linkcard/linkcard_fetch.core.php 단 1개 파일 | 링크 미리보기 카드에서만 필요 | [확인 필요] | :230-238 new DOMDocument(). class_exists('DOMDocument') 가드 0건, 호출은 :434 에서 무조건. → 확장 부재 시 이 경로 폴백 코드가 없습니다. |
max_execution_time ≥ 120 | 진단 | 권장 | warning | admin/environment_api.core.php:169-180 |
memory_limit ≥ 128M | 진단 | 권장 | warning | admin/environment_api.core.php:182-190 |
기존 문서가 댓글에서 발견하도록 방치했던 부분을 여기서 고백합니다.
1. ext-dom이 없으면 "링크 미리보기 카드"가 위험합니다.
v10.5.1의 링크 미리보기 카드는 웹 페이지를 받아new DOMDocument()로 파싱합니다. 확장 존재 검사가 코드에 없습니다. ext-dom이 없는 서버에서 이 경로가 도달하면 어떻게 되는지는 런타임에서 재현하지 않았으므로 [확인 필요] 로 둡니다. 다만 폴백 코드가 없다는 것은 확인했습니다(전수 grepclass_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 활성화 + 자체 비밀번호로 관리자 페이지에 들어갈 수 있습니다.| 항목 | 값 | 근거 |
|---|---|---|
| 데이터 경로 최소 권장 권한 | 707 | extend/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/collab | tree 349항목에서 collab는 data/t2editor_db/collab 와 plugin/collab 두 갈래뿐 |
⚠ 775를 넣지 마십시오. 775는 v11 계약입니다(T2Editor v11 설치 문서 기준). v10 계약은 707입니다. 판본이 다르면 계약이 다릅니다.| 항목 | 실측 내용 | 근거 |
|---|---|---|
| 배포일 표기 혼재 | 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를 보십시오.
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_값입니다. 이 둘을 혼동하면 안 됩니다.
| 존재하지 않음 | 실물 위치 |
|---|---|
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.php | v11 전용 |
editor.core.php:396-404 — readme.txt의 한글 조항·영문 조항·파일 참조 정보 각 해시를 내장 기대값과 hash_equals 로 비교합니다. 즉 판본별 라이선스 파일이 아니라 파일 내용 대조 방식입니다. readme.txt를 직접 편집하면 인증이 깨집니다.
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절의 매트릭스가 답입니다.
이 문서에 남긴 미확인 / [확인 필요] 전부입니다. 지어낸 값은 없습니다.
| # | 항목 | 왜 미확인인가 | 채우는 방법 | |:-:|---|---|---| | 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- 번호는 2026-09-28에 등록부를 확정하면서 붙였습니다. 확정된 신규 문서는 4건입니다.
| 번호 | 슬러그 | 내용 |
|---|---|---|
| N-02 | N-02-admin-console-guide.md | 통합 관리 페이지 가이드 |
| N-03 | N-03-migration-v9-to-v10.md | v9 → v10 이관 안내서 |
| N-05 | N-05-cms-adapter-and-data-paths.md | CMS 어댑터와 데이터 저장 위치 |
| N-06 | N-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에 포함).
all-versions.jsonv10-release-notes.jsontak2-08/T2Editor-v10 저장소 · 브랜치 releases/v10.5.1tak2-08/T2Editor-v1 ~ T2Editor-v11 저장소 설명T2Editor v11 guide.txt (v10 항목이 아님을 구분하는 용도로만 인용)미확인이 있으면 그 칸을 지우지 말고 §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 | ||