한국어 Windows 에서 whoami 가 CP949 로 출력해 계정명에 한글이 있으면 invalid UTF-8 이 응답 배열에 실리고 json_encode 가 false 를 반환한다. echo false 는 빈 문자열이라 HTTP 200 + 빈 본문이 나가는데 예외도 로그도 남지 않아, 설치 마법사 2단계가 진행 불가 상태로 멈춘다. 2026-07 수정(7.0.2)은 로그 축 4곳만 막았다. 출처에서 정규화하고(1차), 응답 경계를 단일 헬퍼로 닫고(2차), 실패 시 문제 필드 경로를 로그에 남기도록(3차) 세 층으로 처리해 다른 경로가 열린 채 남지 않게 했다. 정규화는 복원 가능한 코드페이지 출력을 먼저 되살리므로, 종전 mb_scrub 단독 처리와 달리 한글이 U+FFFD 로 훼손되지 않는다. 같은 원인으로 한국어 Windows 에서 관리자 환경설정의 시스템 정보가 500 이 되던 것도 함께 막았다.
46 lines
1.4 KiB
PHP
46 lines
1.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* 그누보드7 웹 인스톨러 - 필수 파일 존재 여부 체크 API
|
|
*
|
|
* Step 5 진입 시 JavaScript에서 호출하여 .env 파일의
|
|
* 존재 여부 및 쓰기 가능 여부를 확인합니다.
|
|
*/
|
|
|
|
// 필수 파일 include
|
|
require_once __DIR__.'/../includes/config.php';
|
|
require_once __DIR__.'/../includes/functions.php';
|
|
require_once __DIR__.'/_guard.php';
|
|
installer_guard_or_410();
|
|
|
|
// JSON 응답 헤더
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
|
|
// GET 요청만 허용
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
|
|
http_response_code(405);
|
|
echo installer_json_encode([
|
|
'success' => false,
|
|
'message' => 'Only GET requests are allowed.',
|
|
], JSON_UNESCAPED_UNICODE);
|
|
exit;
|
|
}
|
|
|
|
$envPath = BASE_PATH.'/.env';
|
|
|
|
// 소유자 === 웹 서버 사용자 여부 판별 (chgrp/sudo 생략 기준)
|
|
$webUser = getWebServerUser();
|
|
$baseOwner = function_exists('posix_getpwuid') && function_exists('posix_getuid')
|
|
? (posix_getpwuid(fileowner(BASE_PATH))['name'] ?? null)
|
|
: null;
|
|
$ownerIsWebUser = $webUser && $baseOwner && $webUser === $baseOwner;
|
|
|
|
echo installer_json_encode([
|
|
'env_exists' => file_exists($envPath),
|
|
'env_writable' => file_exists($envPath) && is_writable($envPath),
|
|
'path' => BASE_PATH,
|
|
'relative_path' => '.',
|
|
'is_windows' => isWindows(),
|
|
'owner_is_web_user' => $ownerIsWebUser,
|
|
], JSON_UNESCAPED_UNICODE);
|