Extra Form
PHP PHP 7.2
CMS Rhymix

페이지를 로딩하면서 발생되는 에러들은 잡기가 쉬운데 백그라운드? 형식으로 제가 확인하지 않는 상황에서의 에러는 일부러 상황을 만들어 에러를 확인하지 않으면 어렵네요.

 

 

$args->url = $list['link'];
                $args->module_srl = $list['target_module_srl'];
                $exist_url = executeQuery('xrss.getXrss', $args);
                if(count($exist_url->data)>0) continue;

 

 

위와 같은 곳에 count함수가 워닝 에러가 발생합니다.

 

Warning: count(): Parameter must be an array or an object that implements Countable

 

$exist_url  가 array 가 아니라서 그런건가요????

아니면 결과값이 없는 경우에서만 발생하는건가요???

 

 

<query id="getXrss" action="select">
    <tables>
        <table name="xrss" />
    </tables>
    <columns>
        <column name="url" />
    </columns>
    <conditions>
        <condition operation="equal" column="url" var="url" />
        <condition operation="equal" column="module_srl" var="module_srl" pipe="and" />
    </conditions>
</query>

 

요렇게 쿼리를 해서  $exist_url 에 담길텐데요.

 

 

이런 경우는 애초에 count 함수를 쓰면 안되는 것인건가요??

if($exist_url) continue;

 

0보다 크다로 확인하느니 있냐 없냐로 해도 될 것 같다는 생각이 드는데요...

 

 

 

이 케이스에서는 if(count($exist_url->data)>0) continue;   ->>>   if($exist_url) continue; 로 고치는게 올바르게 고치는건가요?

 

 

 

  • profile

    RXE에서 executeQuery를 사용하면 $output->data의 값은 아래와 같이 다양한 경우의 수가 있습니다.

    - 결과가 0개인 경우: NULL

    - 결과가 1개인 경우: 오브젝트

    - 결과가 2개 이상인 경우: 배열에 오브젝트들이 들어 있음

     

    PHP 7.2 이상에서는 배열이 아닌 것에 count()를 사용하면 워닝이 발생하고, PHP 8.0에서는 치명적인 오류가 발생합니다. 위의 3가지 가능성 중 2가지 모두 여기에 해당되지요.

     

    붙여주신 코드를 보면 count > 0 조건을 쓰고 있는데요, 그렇다면 결과가 1개 이상인지 확인하기만 하면 되는 것 같습니다. 이 경우 count와 부등호를 모두 제거하고 if ($exist_url->data) 라고만 해도 무방합니다. 0개라면 NULL이 반환되어서 조건문이 거짓이 될 테고, 1개인 경우와 2개 이상인 경우를 굳이 구분할 필요가 없으니까요.

  • profile profile
    ->data 까지 붙여줘야 하는 군요. 감사합니다.
    XE푸시앱에서도 비슷한 에러가 뜨는데 문의를 해도 답을 안하네요. 뭐 늘 그랬지만 뭐 역시나 답을 안해요 ㅋ
  • profile

    위와 같은 경우는 그나마 경우의 수가 적고, 1개든 2개든 상관없으니까 쉬운데요.

    count 워닝이 뜨는데 어떻게 수정해야 할지 막막할 경우 라이믹스에서 사용할 수 있는 꿀팁이 있습니다. count를 countobj로 바꾸면 배열이든 오브젝트든 상관없이 그냥 적당히 카운트해 줍니다. ㅋㅋㅋ

  • profile profile
    이것 때문에 코어 뒤져보다가 7.2 count 워닝 패치에서 countobj 로 바뀐거 봤는데 이런 기능이었군요. 그럼 유지보수 안되는 서드파티들 중에 확인하기 어려운건 그냥 countobj 로 바꾸는 것도 방법이겠네요 ㅋ
  • profile profile

    코어에서도 바꾸기 애매한 것들은 모두 countobj로 대체하고 있습니다. 하나 만들어 놓으니까 편하더라구요.

    ?:[]와 함께 매우 편리한 땜빵 방법 중 하나입니다. ㅎㅎ