"2.0rem", // 하단 "최근 데이터 리스트(원본DB)" - 표(데이터) 폰트 크기 "list_value" => "0.95rem", ]; $NS40_FONTS = $__NS40_FONTS_DEFAULT; if (is_file($__NS40_FONT_JSON)) { $raw = @file_get_contents($__NS40_FONT_JSON); $j = json_decode($raw, true); if (is_array($j)) { foreach ($j as $k=>$v) { if (isset($NS40_FONTS[$k]) && is_string($v) && trim($v)!=="") { $NS40_FONTS[$k] = trim($v); } } } } $__is_direct = (basename($_SERVER['SCRIPT_NAME'] ?? '') === basename(__FILE__)); if (!$__is_direct) return; // ⚠️ 다른 include 파일과 함께 로드될 때 전역 함수명 충돌(Fatal: Cannot redeclare ...) 방지 $h = function($s){ return htmlspecialchars((string)$s, ENT_QUOTES|ENT_SUBSTITUTE, "UTF-8"); }; $msg=""; if ($_SERVER["REQUEST_METHOD"] === "POST") { $kpi = trim($_POST["kpi_value"] ?? ""); $list = trim($_POST["list_value"] ?? ""); // 간단 검증: 길이 제한 + 허용 문자(숫자/소수/단위) $ok1 = ($kpi==="" || preg_match('/^[0-9.]+(px|rem|em|%)$/', $kpi)); $ok2 = ($list==="" || preg_match('/^[0-9.]+(px|rem|em|%)$/', $list)); if(!$ok1 || !$ok2){ $msg = "형식 오류: 1.2rem / 18px / 110% 같은 형태로 입력하세요."; } else { $save = [ "kpi_value" => ($kpi==="" ? $__NS40_FONTS_DEFAULT["kpi_value"] : $kpi), "list_value" => ($list==="" ? $__NS40_FONTS_DEFAULT["list_value"] : $list), ]; $ok = @file_put_contents($__NS40_FONT_JSON, json_encode($save, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT)); if ($ok !== false) { $msg = "저장 완료: " . basename($__NS40_FONT_JSON); $NS40_FONTS = array_merge($NS40_FONTS, $save); } else { $msg = "저장 실패: 서버 권한(쓰기 권한)을 확인하세요. (" . $h($__NS40_FONT_JSON) . ")"; } } } ?>
2.0rem, 18px, 110%