안녕하세요?

 

람보입니다.

 

이번에 라이믹스 알림센터에 불필요한 코드를 제거하고 불필요한 동작 및 여러가지 보안점을 점검하고 수정하고 있습니다.

 

오래된 기존의 코드를 줄이고 PHP7.0 이상에 맞게 도약하는 의미로 코드를 최신에 맞춰서 유지하기 위해 꼼꼼히 따져보고 있습니다.

 

다만 라이믹스에서는 기본 코어의 내장이지만 XE1에서는 외부 서드파티로 분류되고 있는 알림센터 이고, 서드파티이지만 다른 외부 서드파티중에서 제일 많이 간섭하고 들이대는 모듈이 알림센터이기도 합니다.

 

따라서 알림센터가 가진 다음의 문제점을 해결하기 위해서는 저의 독단적인 개인행동으로 막 변경하는 것이 아니라 여러분의 도움이 필요하여 여기에 글을 쓰게 되었습니다.

 

현재 PHP7.2이상의 문제인지 정확히 모르겠지만 함수의 메서드에서 parameter 의 기본값이 첫번째 parameter에 지정할 수 없는 문제점이 있는 것 같습니다.(2개 이상의 피라미터를 가진 함수에서 두번째 피라미터가 requied 이라면 첫번째 피라미터엔 기본값을 줄 수 없는 문제가 있습니다.)

 

ex)

 

제목_없는_클리핑_091918_061549_PM.jpg

 

위의 이미지를 참고하시면 아시다 싶이 testFunctionOne 에서 앞의 $bintext 부분이 기본값으로 지정시 이 부분의 에러가 있고 가벼운 워닝 이하의 php에러를 출력할 것으로 추정되는 부분입니다.

 

현재 PHP가 계속 발전해 나가며 언젠가는 PHP8, 9, 10 까지 올라갈 부분을 대비해 여러분들에게 이슈를 알려드리고자 합니다.

 

https://github.com/bjrambo/rhymix/commit/556cc606575a898df3cb45c47100d159d310427b

 

현재 PR진행중인 내용에서 한 코드 베이스입니다.

 

위의 이미지와 같은 이슈로 인해서 알림센터모듈의 ncenterlite.controller.php 파일 내의 updateFlagFile 메서드에 한해서 parameter순서를 변경하였습니다.

 

기존에는 member_srl먼저, 이후 $output 오브젝트를 추가하도록 하였으나 지금은 $output 오브젝트 먼저 그다음 member_srl 을 넣도록 순서를 변경할 예정입니다.

 

이에 XE용 알림센터도 마찬가지로 updateFlagFile메서드가 있다면 이를 확인한 다음 일괄적으로 변경하여 서로간의 호환성이 유지되어 XE사용자와 Rhymix 사용자간의 서드파티를 개발하는 개발자분들이 두번씩 고민안하셔도 될 수 있도록 호환성을 유지하고자 합니다.

 

updateFlagFile메서드를 사용하는 개발 자료를 알고 계신분 혹시 계시나요?

 

만약에 이 부분의 문제가 없으면 그대로 라이믹스에 먼저 적용할 예정입니다!

 

혹시 알림센터의 updateFlagFile메서드를 사용하는 서드파티 자료를 알고 계신분 계시면 꼭 댓글이나 쪽지를 통해서 알려주시면 감사하겠습니다.

 

감사합니다.

람보

profile
람보입니다.
  • profile
    람보님이 질문을 올리시다니 왠지 생소하고 신기하네요~

    제 실력이 미천해서 답변을 드릴 수는 없지만 잘 될길 바랍니다!
  • profile
    첫번째 파라미터 없이 두번째 파라미터를 넘길수 있나요?
  • profile profile
    보통은 $oNcenterliteController->updateFlagFile(null, $object);

    이런형태로 앞부분을 없애야 해요.

    이게 규칙이라서요 ㅎㅎ
  • profile profile

    이건 첫번째 파라미터를 안넘긴게 아니라 null 을 넘긴거죠.

    아래 예제를 콘솔에서 실행하거나 에러로그 보시면 이해하실거에요.

     

    function foo($param1) {
    var_dump($param1);
    }
    
    function foo2($param1, $param2 = null) {
    var_dump($param1);
    }
    
    foo();
    
    foo2();

     

  • profile profile
    이것도마찬가지입니다.. php 7.1 이상부터는 parameter에 기본값이 지정되있지않은 항수를 호출할경우 무조건 Fatal급이상의 에러가 발동되어 php 동작이 중지됩니다
  • profile profile
    따라서 처음답변때 무조건 피라미터값을 넘겨야한다고 전달드렿고.. 함수호출시에서 두번째들어갈 인자를 첫번째 넣으면당연히 어딘가는 플랭캔슈타인처럼 에러를 뿜습니다.. 이건 php만아니라 다그렇습니다.

    다른언어들은 인자의 타입을 지정하기때문에 컴파일시대부분 에러뜨기때문에 이러한일이없죠.

    php는 스크립트언어라서 컴파일되는형태도 아니라서 이러한규칙은 개발진이 잘지켜야해요
  • profile ?

    이해가 잘 안되는게...

    두번째 인자에도 기본값을 지정해줘버리면 매우 간단한거 아닌가요?

     

     

     

    function makeCall($from, $to){
        return new KT_4G($from)->makeCall($to);
    }

     

    지금 고민하시는게, $from 값은 고정되는 경우가 많고, $to 값은 계속 바뀌는 경우가 많은데,

    $from 인자가 앞에 있어서 기본값을 주기가 애매하니, 두 인자의 순서를 바꾸는게 어떤가.. 하시는 듯 합니다만...

     

     

     

    function makeCall($from = '01012345678', $to = null){
        if($to == null) trigger_error('WHERE'S RECEIVER?', E_USER_ERROR);
        return new KT_4G($from)->makeCall($to);
    }

     

    위 코드처럼 null 값인지 아닌지 확인해보고, null 값이 들어왔으면 OUT! 시켜버리면 간단한 문제가 아닐까요.

    저정도 코드 처리한다고 리소스를 막 집어먹는것도 아닐테니, 요즘 시대에(?) 성능 운운하며 기피할 정도의 내용도 아니구요.

     

     

     

    function makeDial($to, $from = '01012345678'){
        return makeCall($from, $to);
    }
    
    function makeCall($from, $to){
        return new KT_4G($from)->makeCall($to);
    }

     

    이것처럼 인자 순서가 다른 alias 를 하나 생성하는 것도 괜찮겠네요.

    아, 기본값이 필수라면 둘 다 null 을 기본값으로 주면 되겠구요.

     

     

     

    해당 함수의 사용자가 있을까 찾아보고, 없는것 같으니 패치하자... 라는것 보다는,

    차라리 새로운 이름의 함수를 선언해 버리거나, 문제되지 않는 기본값을 줘버리면 되지 않을까요.

     

    인자 순서가 바뀐 함수가 효율적이라는 점은 이해했습니다만...

    이미 비효율적인(?) 방식으로 배포를 했고, 그게 어느정도 유지가 되었다면, 섣불리 변경해서는 안된다는 생각입니다.

    이미 PHP에도 뭔가 이해할 수 없는 인자 순서를 가진 함수들이 넘쳐나구요ㅋㅋㅋ

  • ? profile
    기본값 잘못 지정하면.. 함수를 자주 사용할 수 있는 옵션에서 반드시 필수여야 사용이 가능한 함수에서는 어디엔가는 문제가 발생될 수 있는 부분이기 때문입니다.

    만약 제가 말씀드린 함수자체가 여기저기 서드파티에서 개입할 수 있는 그런 함수라면 누군가의 의해서 잘못된 정보를 보낼 수 있기 때문이예요.

    더구나 해당 함수는 특정한 member_srl 을 가지고 특정하게 캐시를 만들어주는 그런 함수이기 때문에 기본값을 뒤에 같이 지정해주기엔 고민이 되었던 함수라서 변경을 하려고했는데 함수 사용이 알림센터에 한정적일 거 같아서 일딴 뒤에 기본값을 추가하고 다시 원상복구 할까도 생각중입니다.
  • ?
    PHP7.2 이상의 문제가 아닌것 같습니다.

    7.0 에서도, 5.6에서도, 4.0에서도(..!) 안되는걸로 알고 있고,
    된다고 하더라도 첫번째 파라미터가 없으면 두번째 파라미터도 넘길수 없으니...
  • ? profile
    네넵!

    근데 에디터를 IDE상으로 사용하다보니 그 부분을 발견을 아직 못했었어요.

    그래서 이번에 코드를 다시 정리하면서 필요한 순서 변경이 아닐까 생각되어서 이렇게하고 있어요.

    근데, 굳이 사용되지 않을 가능성도 없지 않아 있어서 변경하는데에는 문제가 없을수도 있을거같네요 ㅎㅎ
  • profile ?
    해당 함수가 어디서 사용되는지, 얼마나 사용되는지는 잘 모르겠지만...

    혹 파라미터 순서를 바꾸신다면, 변수 타입을 확인하는 방식 등을 사용해서...
    한동안은 순서 상관없이 사용이 가능하도록 수정 유예기간을 주는것도 나쁘지 않다고 생각합니다.
  • ?
    오오..화이팅입니다!
    역시 람보님이네요..
    물론 전 쩌리라 답변은 못드리지만..ㅠ