| CMS/프레임워크 | Rhymix 2.1 |
|---|---|
| 개발 언어 | PHP 8.3 |
| 문제 페이지 주소 | 비공개 (검색로봇) |
Rhymix 2.1.26 로컬에서는 문제가 없었음.
2.1.28에서 발생함.
다른 버전별로 각각 다 테스트를 해보지는 않았음.
1.
https://eond.com/index.php?module=admin&act=dispIntegration_searchAdminContent
이 주소에서 스킨을 변경 적용함
2. 계속 default 스킨으로만 적용됨
3. 모든 캐시 지우고
4. db에서 직접 module_config 테이블에서 integration_search 테이블의 default 값을 변경하고자 하는 스킨명으로 저장 후
5. 다시 1번 주소에서 테스트해봐도 default 로만 보여졌음. 캐시 다 지워도 동일했음.
6. 디버깅했음. 아래는 디버깅 로그
```
[Sun Nov 16 22:40:20.178464 2025] [proxy_fcgi:error] [pid 2856592:tid 2856592]
[client 121.151.25.196:0] AH01071: Got error 'PHP message: [IS CONFIG] Saving
skin: default, mskin: /USE_RESPONSIVE/; PHP message: [IS CONFIG] Save result:
SUCCESS', referer:
https://eond.com/index.php?module=admin&act=dispIntegration_searchAdminContent
[Sun Nov 16 22:41:47.125845 2025] [proxy_fcgi:error] [pid 2856585:tid 2856585]
[client 121.151.25.196:0] AH01071: Got error 'PHP message: [IS CONFIG DEBUG]
$_POST: Array\n(\n [error_return_url] =>
/index.php?module=admin&act=dispIntegration_searchAdminContent\n [mid] => \n
[ruleset] => insertConfig\n [act] =>
procIntegration_searchAdminInsertConfig\n [module] => admin\n
[xe_validator_id] => modules/integration_search/tpl/index/1\n [skin] =>
es_api\n [mskin] => /USE_RESPONSIVE/\n [block_robots] => Y\n
[target_types] => Array\n (\n [0] => document\n
[1] => comment\n [2] => multimedia\n [3] => file\n
)\n\n [target] => exclude\n [target_module_srl] => \n
[_rx_csrf_token] => GC4cJatSJuo36fLk\n)\n; PHP message: [IS CONFIG DEBUG]
$_REQUEST: Array\n(\n [error_return_url] =>
/index.php?module=admin&act=dispIntegration_searchAdminContent\n [mid] => \n
[ruleset] => insertConfig\n [act] =>
procIntegration_searchAdminInsertConfig\n [module] => admin\n
[xe_validator_id] => modules/integration_search/tpl/index/1\n [skin] =>
es_api\n [mskin] => /USE_RESPONSIVE/\n [block_robots] => Y\n
[target_types] => Array\n (\n [0] => document\n
[1] => comment\n [2] => multimedia\n [3] => file\n
)\n\n [target] => exclude\n [target_module_srl] => \n
[_rx_csrf_token] => GC4cJatSJuo36fLk\n)\n; PHP message: [IS CONFIG DEBUG]
DB\xec\x97\x90\xec\x84\x9c \xec\x9d\xbd\xec\x9d\x80 \xea\xb8\xb0\xec\xa1\xb4
skin: default; PHP message: [IS CONFIG DEBUG] Context::get(skin): 'default';
PHP message: [IS CONFIG DEBUG] Context::get(mskin): '/USE_RESPONSIVE/'; PHP
message: [IS CONFIG] Saving skin: default, mskin: /USE_RESPONSIVE/; PHP
message: [IS CONFIG] Save result: SUCCESS', referer:
https://eond.com/index.php?module=admin&act=dispIntegration_searchAdminContent
```
$_POST에는 skin => es_api가 정상적으로 전송되는데, Context::get('skin')이 default를 반환하고 있음.
이것은 Rhymix의 Context 클래스가 POST 데이터를 처리하기 전에 DB에서 읽은 기존값(default)으로 덮어쓰고 있다는 뜻임.
해결 방법: POST 데이터를 직접 사용하도록 수정함.
modules/integration_search/integration_search.admin.controller.php:36
$received_skin = $_POST['skin'] ?? Context::get('skin');
$received_mskin = $_POST['mskin'] ?? Context::get('mskin');
문제 원인:
- $_POST['skin']에는 es_api가 정상 전송됨
- 하지만 Context::get('skin')이 DB에서 읽은 기존 값 default를 반환
- Rhymix Context가 내부적으로 기존 설정을 우선시하도록 되어 있음
해결:
- $_POST에서 직접 가져오도록 수정
- $_POST['skin']이 있으면 그것을 사용, 없으면 Context::get('skin') 사용
이 과정에서 어디서 문제였나 모르겠지만 삽질하면서 기존 설정값도 다 날아감 ( '')....
혹시 최신 버전에서 통합검색스킨 변경 잘 되시던가요?
# 빠른 라이믹스 커뮤니티용 호스팅을 찾고 계신가요? >>>> 이온디호스팅 서비스는 PHP8 & Redis 서버 캐시를 활용하여 라이믹스에 최적화된 호스팅 서비스를 제공해드립니다. (서버세팅시 웹패널, 내도메인메일서비스도 함께 구축해드립니다.)
https://eond.com
댓글 4
순정 상태에서는 발생하지 않는 문제입니다.
Context에서 POST 변수를 가져오는 것은 모듈 default 설정과 아무 관련이 없습니다.
누군가가 멋대로 Context::set('skin', 'default'); 를 하고 있겠죠.
감사합니다. 혹시 이게 딱 어디서 오류가 난지 잡아주는 건 어려울까요? ㅠ
변수를 생성하는 위치는 추적하기가 힘듭니다. 함수와 달리 backtrace가 안 나와서...
Context::init() 직후, ModuleHandler::init(), ModuleObject::proc() 등에 디버깅 코드를 넣어 보면
어느 시점에 실행되는 애드온이나 트리거가 말썽인지 알아낼 수 있겠지요.
레이아웃, 스킨, 모듈 등 주요 설정들은 context에서 분리하고 특정 인터페이스를 이용하도록 변경하는게 좋을 것같네요.
너무 많은걸 context에 넣아놔서 슈퍼글로벌변수처럼 쓰여서 쉽게 오염되는 것같습니다.
---
아 $_POST 와 context 차이로 인한 문제군요.
context는 슈퍼글로벌변수처럼 쓰이니 입력값을 받을 때는 사용하지않는게 나은 것같네요.
어디서든 쉽게 변조되니까요.