XETOWN

질문/답변

웹에 관련된 질문과 답변을 나눌 수 있습니다.

따로 포인트 관리 애드온을 사용하고 있는데

 

특정 횟수 미만일때에는 포인트 차감이 되지 않도록 

포인트 모듈에 트리거가 개입해서 동작하는 애드온인데

 

PHP Fatal error:  Cannot make static method ModuleHandler::triggerCall() non static in class TriggerModuleHandler in /home/addons/control_download_trigger/class/TriggerModuleHandler.php on line 0

 

이런식으로 애러가나네요..

 

라인이 0번째 줄인건 처음보네요.. 

 

해당 에러가 난 소스는 이런식으로 시작되는데

 

라이믹스의 호출명이 XE와는 다른가요..? 

$output = TriggerModuleHandler::triggerCall('file.downloadFile', 'before', $file_obj);


 

<?php
/* Copyright (C) UPGLE <http://www.upgle.com> */
class TriggerModuleHandler extends ModuleHandler
{
    /**
     * call a trigger
     * @param string $trigger_name trigger's name to call
     * @param string $called_position called position
     * @param object $obj an object as a parameter to trigger
     * @return Object
     * */
    function triggerCall($trigger_name, $called_position, &$obj)
    {
        // skip if not installed
        if(!Context::isInstalled())
        {
            return new Object();
        }

        $oModuleModel = getModel('module');
        $triggers = $oModuleModel->getTriggers($trigger_name, $called_position);
        if(!$triggers || count($triggers) < 1)
        {
            return new Object();
        }

        foreach($triggers as $item)
        {
            $module = $item->module;
            $type = $item->type;
            $called_method = $item->called_method;

            // 포인트 모듈인 경우 패스
            if($module == 'point') continue;

            $oModule = getModule($module, $type);
            if(!$oModule || !method_exists($oModule, $called_method))
            {
                continue;
            }

            $before_each_trigger_time = microtime(true);

            $output = $oModule->{$called_method}($obj);

            $after_each_trigger_time = microtime(true);
            $elapsed_time_trigger = $after_each_trigger_time - $before_each_trigger_time;

            $slowlog = new stdClass;
            $slowlog->caller = $trigger_name . '.' . $called_position;
            $slowlog->called = $module . '.' . $called_method;
            $slowlog->called_extension = $module;
            if($trigger_name != 'XE.writeSlowlog') writeSlowlog('trigger', $elapsed_time_trigger, $slowlog);

            if(is_object($output) && method_exists($output, 'toBool') && !$output->toBool())
            {
                return $output;
            }
            unset($oModule);
        }

        return new Object();
    }
}
/* End of file TriggerModuleHandler.class.php */
/* Location: ./addons/control_download_trigger/class/TriggerModuleHandler.class.php */
 

 

  • profile
    기진곰 2017.01.13 01:44:13
    애드온에 포함된 TriggerModuleHandler 클래스가 옛날 방식으로 작성되어서 PHP 최신 버전에서 에러가 발생합니다. 12줄의 function 앞에 static을 붙여 주세요.

    아무튼 저런 식으로 애드온에서 코어를 주물러대는 기능은 앞으로 라이믹스와 호환되지 않게 될 가능성이 높습니다. 라이믹스에서는 저렇게 하지 않아도 애드온에서 트리거를 사용하는 새로운 방법을 제공합니다.
  • ?
    루딩 2017.01.13 01:54:04
    아 계속 php 조금씩 공부하고 있었는데 static non-static 이냐 관련 문제로 보고 있었는데

    그 부분 때문인가보네요:))

    기진곰님말씀처럼 알려주신대로 하니까 너무 잘됩니다 캄사합니다+_+//..

    흑흑 호환이 차후 안되면 걱정이 되네요..
  • profile
    GG 2017.01.13 02:39:54
    오.... 애드온에서 트리거가 되는군요.
    저는 이런줄도 모르고 맨날 간단한 모듈로 만들어서 괜히 파일 갯수만 늘렸네요.
  • ?
    루딩 2017.01.13 03:00:12

    애드온조건에 맞는 값일 때,

    기존과 같은 500에러는 안뜨는데, 잘못된 요청입니다 페이지로 다운로드가 안되는데


    혹시 다운로드 관련된 부분에서 XE와 라이믹스가 다른 부분이 있을까요?
    지금은 XE개발자분이 되신분이 제작하신 애드온이라, 코드 짜여진 난이도가 상당히 높아보이네요ㅜㅜ

     

        // Call a trigger (after)
        $output = TriggerModuleHandler::triggerCall('file.downloadFile', 'after', $file_obj);

        $file_key = $_SESSION['__XE_FILE_KEY__'][$file_srl] = hash('md5',rand());
        header('Location: '.getNotEncodedUrl('', 'act', 'procFileOutput','file_srl',$file_srl,'file_key',$file_key));
        Context::close();
        exit();

     

  • ?
    루딩 2017.01.13 03:09:31

    아 라이믹스는
    // Redirect to procFileOutput using file key
    if(!isset($_SESSION['__XE_FILE_KEY__']) || !is_string($_SESSION['__XE_FILE_KEY__']) || strlen($_SESSION['__XE_FILE_KEY__']) != 32)
    {
    $_SESSION['__XE_FILE_KEY__'] = Rhymix\Framework\Security::getRandom(32, 'hex');
    }
    $file_key_data = $file_obj->file_srl . $file_obj->file_size . $file_obj->uploaded_filename . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'];
    $file_key = substr(hash_hmac('sha256', $file_key_data, $_SESSION['__XE_FILE_KEY__']), 0, 32);
    header('Location: '.getNotEncodedUrl('', 'act', 'procFileOutput','file_srl',$file_srl,'file_key',$file_key));
    Context::close();
    exit();

    이런식으로 변경되었네요:))

     

     

    변경된 코드 참조해서 고쳤습니다@.@

  • profile
    기진곰 2017.01.13 11:05:03
    네, 코어 소스를 저렇게 복사해서 만들어 놓은 애드온은 코어가 변경되면 호환되지 않게 될 가능성이 높습니다.

List of Articles
번호 제목 글쓴이 날짜
3734 하다하다 여쭙니다. 통합로그인 8 드론엑스이 2017.01.14
3733 Got a packet bigger than 'max_allowed_packet' bytes 오류 1 Chronos 2017.01.14
3732 모듈 관리자 페이지 (tpl) XE 관리자 페이지 디자인을 탈피 할 수 없을까요? 디자인 종속 받지 않기 2 구름이 2017.01.14
3731 가입후 일정기간 글작성제한 할수 있을까요 ...? 2 구미호 2017.01.14
3730 php7.0에서 getpreventdefauilt의 사용을 권장하지 않습니다. 라는 에러는 어떻게 수정하나요 ? 3 나만의너 2017.01.14
3729 팝업창 띄우는 건대 1.8.29대에선 뭔가 잘안되네요 ! file 이성민 2017.01.13
3728 애드센스를달면 속도가 저하되나요? 2 낙타 2017.01.13
3727 게시판 스킨에서 스팸필터 등록하고 나서 새로고침하는 과정이 꼭 필요한 건가요? 기븐 2017.01.13
3726 XE 모바일도 호환되는 이미지 수정 컴포넌트가 있나요? 4 가시밭 2017.01.13
3725 혹시 채팅방을 열고닫기하는게 어떻게 하는지 자세히 아시는분있나요? 3 라그릿 2017.01.13
3724 DB 에서 태그 일괄 변경 2 가시밭 2017.01.13
3723 로그인한 회원이 해당 문서에 추천을 했는지 비추천을 했는지 알려주려고 합니다. 1 웹지기 2017.01.13
3722 활동을 잘안해서...상황파악좀 할려고.ㅎㅎ 4 똑띠 2017.01.13
3721 회원정보 보기 짧은 주소로 변경 및... 3 라뜨에 2017.01.13
» 라이믹스는 TriggerModuleHandler 사용방법이 다른가요? 6 루딩 2017.01.13
3719 글쓴이(닉네임) 색을 바꾸고 싶어요. 4 현님v 2017.01.13
3718 모듈 제작시 타 모듈명으로 액션을 만들 수 있나요? + standalone 13 투정 2017.01.12
3717 사이트 로딩관련하여.,. 3 떡보의하루 2017.01.12
3716 댓글 읽음, 읽지 않음 표시 애드온 모바일 화면 문제 16 file 라그릿 2017.01.12
3715 라이믹스 관리자 페이지에 있는 알림 설정은 무엇인가요? 3 우리아기 2017.01.12
Board Pagination Prev 1 ... 51 52 53 54 55 56 57 58 59 60 ... 242 Next
/ 242
위로
서버에 요청 중입니다. 잠시만 기다려 주십시오...