Extra Form
PHP PHP 7.3
CMS Rhymix 2.1

 

외부에서 라이믹스 게시판 에디터에 첨부화일을 넘겨주는(?) 모듈이 있는데

라이믹스 업데이트 이후 (라이믹스 업데이트 때문인지, 모듈 수정 때문인지는 모르겠습니다.)에 작동시켜 보니 에러가 발생합니다.

그런데 에러메세지에 언급된 모듈(board_assitant)은 (제 생각엔) 전혀 관계 없는 모듈입니다.  

조언 부탁드립니다..

 

에러 내용:

{"error":-1,"message":"\uc11c\ubc84 \uc624\ub958\n\nTypeError #0 \"Argument 2 passed to Rhymix\\Framework\\Router::parseURL() must be of the type string, null given, called in \/home\/momeng\/www\/modules\/board_assistant\/board_assistant.controller.php on line 18\" in modules\/board_assistant\/board_assistant.controller.php on line 18 (via common\/framework\/Router.php on line 120)"}

 

위 메세지에서 언급된 board_assitant.controller.php 18라인 근처의 내용

class Board_assistantController extends Board_assistant
{
private static bool $blockZstt = false;

public function triggerAfterInsertText($obj)
{
if (self::$blockZstt) {
return;
}

$config = $this->getConfig();
if ($config->enabled !== 'true' || !$config->openai_key || !$config->openai_model) {
return;
}

$ref = \Rhymix\Framework\Router::parseURL('GET', $_SERVER['HTTP_REFERER'], 2);
$segments = explode('/', $ref->url);
$documentSrl = (int) end($segments);
if (!$documentSrl) {
$documentSrl = (int) $_SESSION['board_assistant_record_section_document_srl'];
}

 

  • Lv5
    혹시나 해서 문제가 생기는 라인 $ref = \Rhymix\Framework\Router::parseURL('GET', $_SERVER['HTTP_REFERER'], 2); 을 삭제해보니 정상 작동합니다. 그런데 다른 기능에서 사용하는 기능일 것이 분명해서 영구히 삭제할 수는 없는 상황입니다.
  • Lv3
    에러로그에서 보아하니
    Router.php에서 120번 라인의 function은
    public static function parseURL(string $method, string $url, int $rewrite_level): Request

    입니다.

    method는 'GET' 이고, string값인 url 값이 null로 넘어가고 있는건 아닌지 확인 해 보셨을까요?
  • Lv3 Lv5
    답변 감사합니다.. 그런데 제가 이해할 수 있는 수준을 넘었습니다.. null로 넘어가는게 맞을 것 같은데, null이 되지 않도록 기본값을 설정해주면 괜찮지 않을까 하는데 어떻게 해야할지는 모르겠네요ㅠ
  • Lv5 Lv3
    자료형이 string인 변수 $url이 제대로 된 URL을 넘겨주지 않고 아무런 값이 없는 null로 넘어가고 있는 거 같습니다.
    맥락을 보아하니 $_SERVER['HTTP_REFERER'] 인 것 같은데 사이트 도메인이 하나라면 string으로 하드코딩하여 넘겨보심은 어떠신지요?

    모듈을 몰라 어떻게 수정해야할지 말씀드리기 어렵네요
  • Lv3 Lv5
    감사합니다! 모듈 제작해주셨던 분이 새해 첫날인데도 연락이 되서 해결이 곧 될 것 같아요.
  • Lv37

    Router::parseUrl에 리퍼러를 그대로 넘기는 것은 아무 의미가 없으니
    처음부터 잘못 구현된 모듈입니다.

    리퍼러가 null이 아니고 정상적인 https://... URL이 담겨 있다 해도 안 되는 것은 똑같습니다.
    Router::parseUrl이 기대하는 것은 그런 형식의 URL이 아니기 때문입니다.

    만약 $ref에 어떤 결과가 담겨 나온다고 해도 그건 그냥 에러내서 토해낸 것이지, 정상적인 결과가 아닐 겁니다.

    따라서 해당 부분의 코드를 지워버리더라도
    작동 안 하는 것은 여전히 안 하고, 결과적으로 큰 차이 없을 것으로 예상됩니다.

  • Lv37 Lv5
    감사합니다!