아래 원 질문글 로그 살펴보라고 하셔서 체크했습니다.

(서버 상태: Windows 10 + NginX + XE 1.11.1 + Rhymix 1.9.8.4 Develop / PHP 7.2.12)

 

https://xetown.com/questions/1120062

 

error_02.jpg

 

문제가 발생하는 상황은 Admin이 아닌 일반 유저가

사진을 첨부해서 본문에 이미지가 삽입된 상태에서 글 등록을 누르면 발생합니다.

(Admin인 경우 발생 안 함, 일반 유저가 사진 첨부만 하고 본문 삽입 안 하면 발생 안 함)

 

Full Log도 첨부합니다.

 

=============================================

[03-Dec-2018 10:21:52 Etc/GMT-9] PHP Exception: Error #0 "Call to undefined function mcrypt_encrypt()" in W:\www\common\libraries\cryptocompat.php on line 31
#0 W:\www\common\framework\security.php(67): CryptoCompat::encrypt()
#1 W:\www\common\framework\filters\htmlfilter.php(536): Rhymix\Framework\Security::encrypt()
#2 (): Rhymix\Framework\Filters\HTMLFilter::Rhymix\Framework\Filters\{closure}()
#3 W:\www\common\framework\filters\htmlfilter.php(538): preg_replace_callback()
#4 W:\www\common\framework\filters\htmlfilter.php(428): Rhymix\Framework\Filters\HTMLFilter::_encodeWidgetsAndEditorComponents()
#5 W:\www\common\framework\filters\htmlfilter.php(106): Rhymix\Framework\Filters\HTMLFilter::_preprocess()
#6 W:\www\common\legacy.php(818): Rhymix\Framework\Filters\HTMLFilter::clean()
#7 W:\www\modules\document\document.controller.php(488): removeHackTag()
#8 W:\www\modules\board\board.controller.php(186): documentController->insertDocument()
#9 W:\www\classes\module\ModuleObject.class.php(608): boardController->procBoardInsertDocument()
#10 W:\www\classes\module\ModuleHandler.class.php(807): ModuleObject->proc()
#11 W:\www\index.php(52): ModuleHandler->procModule()
=============================================

 

해당 문제를 좀 검색해보니,

Mcrypt가 PHP 7.1에서 deprecated되었고, PHP 7.2 버전에서는 remove 되어서 그렇다고 하는데요.

(윈도우가 아닌 경우 소스를 받아서 빌드해서 서버에 첨부하더군요... 저는 윈도우라 현재 상태로 그게 불가능합니다.

좀 찾아봤는데 마땅히 빌드된 라이브러리도 안 보이네요.... ㅠㅠ)

https://secure.php.net/manual/en/migration71.deprecated.php

https://windows.php.net/downloads/pecl/releases/mcrypt/1.0.1/logs/ <= 로그만 존재하고 라이브러리는 없습니다.

https://serverpilot.io/docs/how-to-install-the-php-mcrypt-extension

https://lukasmestan.com/install-mcrypt-extension-in-php7-2/

 

Mcrypt가 없어지고 대신 Sodium이라는 걸 사용하게 바뀌었다고 하네요.

 

로그를 살펴보면, 

common\libraries\cryptocompat.php에서 CryptoCompat::encrypt()를 호출하는데,

이 부분 라이브러리가 없어서 발생하는 것으로 보입니다.

 

이걸 제가 Sodium으로 바꿀 능력은 안 될 거 같은데,

이런 문제가 혹시 예전엔 없었나요? 어떻게 해결해야 하나요?

Rhymix에서 참조하는 코드(Rhymix\Framework\Security:::encrypt()) 이니,

Rhymix에서 수정이 되어야 할 것 같은데요.... 

 

XE에서 Rhymix로 서버는 갈아엎으면서 PHP 7.0 => PHP 7.2로 바꾸었더니 이도저도 못 하고 있네요... =ㅅ=;;;;

 

도움 부탁 드립니다.

어쨌든 감사합니다.

 

  • profile

    라이믹스에서 요구하는 조건을 충족하지 못하는 서버 환경이라서 발생하는 문제입니다.

    설치 조건을 제대로 체크하고 사용해 주세요.

     

    https://github.com/rhymix/rhymix-docs/blob/master/ko/introduction/requirements.md

    여기를 보시면 openssl과 mcrypt 둘 중 하나는 반드시 있어야 합니다.

    PHP 7.2에는 mcrypt가 없으므로 openssl이 유일한 옵션인데,

    사용하시는 서버에는 openssl 확장모듈이 설치되어 있지 않은 것 같습니다.

     

    openssl 확장모듈이 설치되어 있다면 mcrypt에 의존하는 라이브러리를 호출하지 않도록 되어 있거든요.
    mcrypt는 openssl이 없는 경우 차선책으로 사용하는 것입니다.

    libsodium은 필요하지 않습니다.

     

    물론 윈도우 서버는 기본적으로 지원하지 않는다는 정책이라

    뭘 해도 설치 조건이 충족되지 않는다는 점은 마찬가지이긴 합니다만;;

    openssl 확장모듈이 있다면 일단 돌아가긴 할 거예요.

  • profile ?
    php.ini에서 php extension 중에 openssl enable 한 후에
    OpenSSL Library 64bit로 업데이트하고,
    'OPENSSL_CONF' 경로 변경해서 수정하니 문제가 해결되었습니다.
    (php_crypto.dll은 없어도 되네요. 그냥 내부에 php_openssl.dll 로 해결됩니다.)

    도와주셔서 감사합니다.

    (댓글을 여기에 달아야 알 수 있다고 해서 이것도 옮겨 답니다.
    혹시 다른 필요하신 분이 있으실 수 있으니 글은 남겨 놓겠습니다.)
  • ? profile
    해결되었다니 다행이네요. 다음 버전에서는 PHP 7.2에서 openssl이 없는 경우 엉뚱하게 mcrypt 에러를 뿜지 않도록 패치하겠습니다. 사람 헷갈리게 하는 에러메시지는 차라리 없는 것만 못하니까요.
  • ?
    openssl은 설치되어 있는데,
    php_crypto.dll 이 없어서 php랑 연동이 안 되는 것 같네요.

    좀 더 확인해보겠습니다.
    알려주셔서 감사합니다.
  • ?
    php.ini에서 php extension 중에 openssl enable 한 후에
    OpenSSL Library 64bit로 업데이트하고,
    'OPENSSL_CONF' 경로 변경해서 수정하니 문제가 해결되었습니다.
    (php_crypto.dll은 없어도 되네요. 그냥 내부에 php_openssl.dll 로 해결됩니다.)

    도와주셔서 감사합니다.