Extra Form
PHP PHP 7.1
CMS Rhymix

php 7.1로 넘어오면서

 

date관련해서, 혹시 

 

문법 사용이 변경되었나요? 구글 검색해본 결과 변경된 부분이 없는 것 같은데 

 

        if(!Context::get('last_login')) return;

        require_once('./addons/howlogin/func/howlogin.func.php');
        $howlogin = new howlogin;

        $timeRecord = $howlogin->getTime(Context::get('last_login'));
        $nick_name = Context::get('nick_name');
                

                if(!$addon_info->login_text) 
 

 

 

    if(!defined("__XE__")) exit();
    
    class howlogin{

        function getTime($date, $timeover){
            
            $year = zDate($date,'Y');
            $month = zDate($date,'m');
            $day = zDate($date,'d');
            $hour = zDate($date,'H');
            $min = zDate($date,'m');
            $sec = zDate($date,'s');

 

 

[18-Jun-2019 15:47:26 Etc/GMT-9] PHP Exception: ArgumentCountError #0 "Too few arguments to function howlogin::getTime(), 1 passed in /home/user/html/addons/howlogin/howlogin.addon.php on line 44 and exactly 2 expected" in addons/howlogin/func/howlogin.func.php on line 6
#0 /home/user/html/addons/howlogin/howlogin.addon.php(44): howlogin->getTime()
#1 /home/user/html/files/cache/addons/pc.php(537): include()
#2 /home/user/html/classes/module/ModuleObject.class.php(605): include()
#3 /home/user/html/classes/module/ModuleHandler.class.php(787): ModuleObject->proc()
#4 /home/user/html/index.php(53): ModuleHandler->procModule()
 

  • profile
    애드온 열어서 봤는데 뭔가 이상합니다.

    addon.php 파일에서
    //타임설정 체크
    $timing = $addon_info->login_alert_timing;

    이렇게 애드온 설정에서 알림창 띄우는 시간 간격 옵션을 $timing 에 사용을 하도록 한 것 같은데..


    func.php 파일에서는..

    $timeover 로 사용한 것으로 보입니다.


    이부분이 문제가 있는건지 잘 모르겠지만 조금 이상해 보입니다.

    혹시모르니 $timeover 를 $timing 으로 바꿔 보시고 결과를 한번 보시는 것도....
  • profile ?
    말씀해주신부분 참고해서 수정도 해봤는데 동일한 문제가 있어요

    흑흑 5.6에서 7.1로 넘어가고 애드온 사용이 20개 가량되는데 오류가 한두개가 아니네요 ㅠ_ㅠ
  • ? profile
    7.1에서 의외로 많은 애드온이나 모듈에서 함수부분에서 이런 비슷한 오류가 나옵니다. 기존에 잘못 작성된 것이죠. 일단 문제가 있긴 한거니 고쳐야 하는데 저도 개발자가 아니다보니 해당 함수에서 뭘 고쳐야할 지 잘 모르겠네요. 이상해 보이긴 합니다.

    $timeover 가 많이 나오는데 모두 바꾸신건 맞죠 ?
  • profile

    getTime 함수에는 분명히 2개의 변수를 넘겨야 하는데, Context::get('last_login') 1개만 넘기고 있네요. PHP 7.0까지는 1개만 넘겨도 두 번째 변수는 그냥 NULL이 되었지만 PHP 7.1에서는 치명적인 에러가 납니다. 애당초 잘못 작성된 코드이니 PHP 탓을 할 수도 없고요.

     

    변수 이름이 $timeover인지 $timing인지는 중요하지 않습니다. getTime 함수에 넘기는 갯수부터 맞춰야 합니다.

  • profile profile
    if($timeover == 'all')

    이런 부분이 보이는데요. all 값은 분명히 애드온 설정에서 알림창 간격 옵션 값이거든요. 이걸 변수명 자체가 틀리면 작동이 안되는거 아닌가요?

    물론 지금 php오류는 별개의 문제라고 치더라도요....
  • profile profile

    아 그럼

    44번 라인을
    $timeRecord = $howlogin->(getTime(Context::get('last_login'), $addon_info->login_alert_timing);

    이렇게 해주면
    $timeover 자리에 $addon_info->login_alert_timing

    요게 들어가게 될까요 ???

  • profile ?
    캄사합니당..
    $howlogin->getTime(Context::get('last_login'), ''); 로 해결했습니다 ㅠ_ㅠ
  • profile ?
    뒤에 null 이라도 넣어주면 해결이 됩니당 ㅠ_ㅠ
  • ? profile

    98번라인에 보니..
    $timing_alert = $howlogin->getTime($_SESSION['last_logged'], $timing);

    이렇게 된거 보니 $timing을 사용하시려면 $timing 을 위쪽으로 올리시고 44번 라인도 동일하게 해주셔야 할 것 같은데 아닐까요?

    null 로 넣으면 함수에서 계산하려는게 엉터리가 될 것 같아서요.

  • ? profile

    44번 라인에는 계산이 필요없는게 맞는거 같네요. 알림창을 띄우기 위한 것은 아래에서만 하나봅니다.

  • profile ?
    아마 문제 없지 않을까요?

    예전에는 자동으로 null로 입력되었었는데 정상적으로 동작했던 것으로보아..
  • ? profile
    네. 44번 라인에서는 없어도 되는것 같습니다. 해당 계산 값을 이용하지 않아도 되는거 같아요. 하지만 아래쪽은 그렇게 넣으면 계산이 엉터리가 될 것 같구요~ 아래쪽은 당연히 개발자분께서 실수할 수 없는 곳 같구요.
  • ?
    PHP Exception: ArgumentCountError #0 "Too few arguments to function 이런류의 에러들이 모두 다 넘겨줘야할 변수 부족문제 인 것이었군요..
  • ? profile
    이런거 굉장히 많아요. 아마도 함수를 여러군데서 공통으로 쓰려고 만들었는데 어떤 곳에서는 하나만 필요해서 변수 하나만 넣고 하다 보니 7.1 부터는 짝이 맞지 않으면 에러가 나는 듯 합니다. 저도 애드온,위젯,모듈 많이 고쳤습니다.
  • profile ?

    ereg도 문제인데 (포인트 팡팡 플러스 애드온)
    $msg_pang = eregi_replace("\r|\n", "", strip_tags($msg_pang,'<br>'));

    그냥 preg_replace로만교체해도 문제가 없을까요!?

    $msg_pang = preg_replace ("\r|\n", "", strip_tags($msg_pang,'<br>'));

  • ? profile
    포인트팡팡은 거기만 고치면 될겁니다.
  • ? profile

    preg로 바꾸면 정규식 앞뒤에 슬래시 넣어야 합니다. 쌍따옴표도 문제가 될 수 있어요.

    $msg_pang = preg_replace ('/\r|\n/', "", strip_tags($msg_pang,'<br>'));

  • profile ?
    $msg_pang = eregi_replace("\r|\n", "", strip_tags($msg_pang,'<br>'));

    $msg_pang = preg_replace("\r|\n", "", strip_tags($msg_pang,'<br>'));

    preg가 문법 사용방법이 약간 달라져서
    $msg_pang = preg_replace("/\r|\n/", "", strip_tags($msg_pang,'<br>'));
    / / 를 넣는게 맞는건지 preg_replace만 바꺼줘도 되는건지 헷갈리네요 혹시 동작이 안될까봐
  • profile ?
    아 네!! 구글검색해보니까 / / 달라고 되어있어서 어느게 맞는지 헷갈렸는데 해결해주셔서 감사합니다!

    따옴표도 다 바꿔야겠네요!
  • profile
    이번 케이스와 반대의 경우도 있으니 참고로 기억해 두세요 ㅋ