| CMS/프레임워크 | Rhymix 2.1 |
|---|---|
| 개발 언어 | PHP 8.4 |
안녕하세요.
비개발자입니다.
클로드 코드 시켜서 현재 php를 7.4 -> 8.4로 업데이트 작업을 하고 있는데요.
작업 중 코어 파일을 수정한 부분이 있어 이거 수정해도 되는 건지 문의 드립니다.
1. Security.php (보안 설정 페이지)
// 28행 — 관리자 허용 IP
$allowed_ip = Config::get('admin.allow') ?: array();
// 30행 — 관리자 차단 IP
$denied_ip = Config::get('admin.deny') ?: array();
- 추가한 것: 뒤의
?: array() - 의미: "값이 비어있으면(null이면) 빈 배열을 대신 써라"
- 왜: 바로 아래에서
implode(PHP_EOL, $allowed_ip)로 IP 목록을 줄바꿈으로 합치는데, IP를 한 번도 등록 안 한 상태면null이라 8.4에서 즉사. (같은 파일 21·24행은 원래 가드가 있었는데 이 두 줄만 빠져 있었음)
2. Debug.php (디버그 설정 페이지)
// 27행 — 디버그에 표시할 내용 종류
Context::set('debug_display_content', (array)Config::get('debug.display_content'));
// 35행 — 디버그 허용 IP
$allowed_ip = Config::get('debug.allow') ?: array();
- 27행 추가: 앞에
(array)캐스트 — null이든 뭐든 무조건 배열로 변환. 이 한 줄로 템플릿(config_debug.html)에서 이 값을in_array()로 8번 검사하는 곳이 전부 해결됨 - 35행 추가:
?: array()— Security.php와 동일한 IP 목록implode보호
3. Advanced.php (고급 설정 페이지)
$cache_config = array_first(Config::get('cache') ?? []);
- 추가한 것:
?? [] - 의미: 캐시 설정이 없으면(null) 빈 배열을
array_first()에 넘김 - 왜: 캐시를 한 번도 설정 안 한 서버에서 고급 설정 페이지를 열면 TypeError
- 이건 사실 2.1.32 업그레이드 때 이미 한 번 고쳤던 것입니다 (메모리
reference_rhymix_2132_advanced_php_bug기록). 8.4 작업의 새 발견이 아니라 기존 패치가 유지되고 있다는 의미.
lucas
Lv. 1
댓글 4
1. https://github.com/rhymix/rhymix/blob/c90fcda947e82b87bd4ac03bc592304289e3679c/common/defaults/config.php#L95-L98
admin.allow와 admin.deny의 기본 설정값이 array()이므로 불필요합니다.
2. https://github.com/rhymix/rhymix/blob/c90fcda947e82b87bd4ac03bc592304289e3679c/common/defaults/config.php#L113C4-L113C19
https://github.com/rhymix/rhymix/blob/c90fcda947e82b87bd4ac03bc592304289e3679c/common/defaults/config.php#L119
두 설정값 역시 기본값이 array입니다.
3. https://github.com/rhymix/rhymix/blob/c90fcda947e82b87bd4ac03bc592304289e3679c/common/defaults/config.php#L23
역시 cache 설정 자체가 array로 초기화되므로 불필요합니다.
실제로 해당 부분에서 오류가 발생했다면 라이믹스 버그이니 고쳐야 합니다. 그게 아니라 선제적으로 수정 시도하신 것이라면 전부 불필요한 수정사항입니다.
사이트에서 오류가 발생해서 수정했는데, 그럼 수정한채로 놔둬도 되는 것이죠?
1) Security.php — 보안 설정 페이지
implode()에null이 들어가 터짐 → Security.php:28,30에?: array()가드 추가.2) Debug.php — 디버그 설정 페이지 (정확히는 그 화면 템플릿에서 터짐)
debug.display_content가null인 채 전달된 것.(array)캐스트를 넣어 한 번에 해결.debug.allow는 오류가 나기 전에 제가 먼저 발견해서 같이 막았습니다 (Security.php와 똑같은implode(null)패턴이라, 그 페이지 열면 똑같이 터질 게 명확했음).오류가 났다고 말씀하시니 그 부분은 오류가 난 것이 맞겠지만, 오류가 나기 전에 먼저 발견했다는 것은 AI의 뻘짓이겠죠. 이 녀석 특징이, 문제의 원인을 고칠 생각은 안 하고 당장 에러메시지가 뜨지 않도록 땜빵만 합니다. 근원을 고쳤다고 뻥을 치는 모양인데, 그것도 그냥 땜빵해 놓은 거예요.
진짜 원인은 설정에 null이 저장되어 있다는 것이거든요. 거기에 ?? [] 를 붙이든 (array)를 붙이든 설정 파일이 잘못 저장되어 있다는 점은 변하지 않습니다. 잘못 저장된 설정을 바꾸면 모든 문제가 해결될 텐데, 그걸 그냥 두고 실시간으로 치환만 하고 있는 거예요.
윗분 말씀대로, 해당 설정을 저장한 적이 없더라도 처음 설치할 때부터 배열이 들어가 있었어야 합니다. 안 그러면 라이믹스 처음 설치하신 분들은 다 에러나게요? ㅎㅎ 님 사이트만 유독 설치가 잘못되었거나, 아니면 설정 파일에 엉뚱한 것을 집어넣는 자료가 있는지도 모릅니다.
문제의 설정 페이지들을 한 번씩 다시 저장하셨다면 모두 제대로 기본값이 들어갔을 테니, 순정으로 돌아가도 괜찮을 겁니다. 만약 아직도 불안하다면 files/config/config.php를 열어서 확인해 보세요.
땜빵하고 뻥치는 것이였군요 ㅎㅎㅎㅎ
코어 파일이 8.X 버전에 맞을 텐데 왜 문제가 생기는 건지 궁금했는데,
역시 물어보길 잘 한 것 같네요.
순정 파일로 다시 돌려보니 현재 문제 없이 잘 됩니다.
추가로 files/config/config.php 파일 확인해보니 테스트 서버에는 해당 내용이 누락돼서 문제가 발생한 것 같아 보이네요.