Extra Form
PHP PHP 7.4
CMS Rhymix 2.1

안녕하세요?

 

외국의 저렴한 호스팅을 사용하고 있는데 Cron Job이라는게 지원되더라고요.

이걸 사용해서 애드온을 매일 정해진 시간에 잠깐 켰다가(02:01) 꺼서(02:02) 애드온의 명령어를 실행시켜려고 합니다.

 

호스팅에서 Cron Job 실행시간 설정해주고, php 파일로 명령어를 만들어서 서버에 올리면 자동으로 실행되는 것 같은데요.

아래 명령어를 php 파일로 어떻게 만들어야 하나요?

 

UPDATE rx_addons_site SET is_used = 'Y' WHERE addon = '애드온이름';

 

---------------

 

찾아보니 이런식이던데 맞나요?

 

updater.php


<?
$connect = mysql_connect("localhost","ID","비밀번호")

$dbconn =  mysql_select_db("DB명",$connect);

$sql = "UPDATE rx_addons_site SET is_used = 'Y' WHERE addon = '애드온이름' ";

mysql_close($connect);
?>

 

  • profile
    어떤 애드온인지는 모르겠으나, 잠깐 켰다가 끄는 정도라면, 애드온을 이용할 필요는 없을테고,
    애드온의 기능을 복사해서 PHP 파일에 직접 구현하는 게 효율적일 것 같습니다.

    그리고 여담이지만, DB에서 is_used 칼럼을 수정해도 애드온이 실행되지 않으니, 애드온 캐시 파일(/files/cache/addons/*.php) 을 다시 생성해줘야 합니다.
  • profile profile

    안녕하세요? SimpleCode님...

     

    아래 확장변수 유효기간 애드온은 일정시점에 게시물을 삭제할 수 있도록 되어 있습니다.

    https://xetown.com/tips/1053472

     

    현재 위 애드온을 윤삼님의 도움을 받아 수정해서 확장변수(날짜)가 지난 것은 "진행중"에서 "마감됨"으로 확장변수값을 업데이트해주게 해놓았습니다.

    https://xetown.com/questions/1797669

     

    문제는 애드온을 켜놓고 게시판에 접속하면 계속 값을 체크해서 게시판이 엄청 느려집니다.

    그래서 매일 하루에 한번씩 애드온을 수동으로 켜고 꺼주고 있습니다.

    이용자 입장에서는 단순이 애드온을 키고 꺼주는 것으로 프로그램이 돌아간다고 생각했는데 부수적인 일들이 또 있는 것 같내요.

     

    SimpleCode님 말씀처럼 애드온이 아니라 Cron Job으로 코드 파일을 돌려주면 될 것 같긴하겠는데 코알못이라서...

    해당 애드온은 관리자 설정에서 module_srl, extra_val_name을 입력하여 사용하는데 아래 코드에 직접 대입하면 되겠지요?

    그 다음에는 어떻게 해야할까요?

    알려주시면 감사하겠습니다~~

     

     

    <?php
    
    if(!defined("__XE__")) exit();
        if($called_position!='before_module_proc') return;
    if(($this->module == 'board') && $act) return;
    
    if ($addon_info->module_srl){
    $module_srl = $addon_info->module_srl;
    }else{
    return;
    }
     
    $extra_val_name = $addon_info->extra_val_name;
    $document_srl = $_REQUEST['document_srl'];
    
    if($extra_val_name == '') return;
      
    $args->module_srl = $module_srl;
    $output = executeQuery('addons.cc_ad_limited_posts.doc_list', $args);
    $oDocumentController = &getController('document');
    $oDocumentModel = &getModel('document');
     
    if( count ($output->data) >1){
    foreach($output->data as $__key=>$__val)
    {
    foreach($__val as $key=>$val)
    if($key == "document_srl")
    {
    $getExtraVars = $oDocumentModel->getExtraVars($module_srl,$val);  
    $date_val = "";
    foreach($getExtraVars AS $key_=>$val_)
    {
    if ($val_->eid == $extra_val_name) {
    $date_val =  $val_->value;
    }
    } 
    
    if( $date_val!="" && (strtotime($date_val) < strtotime(date('Ymd'))) )
    {// 날짜가 과거인 경우 
    $temp[] =$val;
    }
    }
    }
    }else{
    foreach($output->data as $key=>$val)
    {
    if($key == "document_srl")
    {
    $getExtraVars = $oDocumentModel->getExtraVars($module_srl,$val);  
    $date_val = "";
    foreach($getExtraVars AS $key_=>$val_)
    {
    if ($val_->eid == $extra_val_name) {
    $date_val =  $val_->value;
    }
    } 
    if( $date_val!="" && (strtotime($date_val) < strtotime(date('Ymd'))) )
    {// 날짜가 과거인 경우 
    $temp[] =$val;
    }
    }
    }
    }
       foreach($temp as $key=>$val)
    {
    $oDocumentController->updateDocumentExtraVar($module_srl, $val, 9, '마감됨'); 
    }
       
    ?>

     

  • profile

    애드온은 항상 켜두고, 그 대신 애드온 소스에서 현재 시간이나 cron job 설정시 집어넣은 특별한 URL 변수를 체크하여, 조건이 맞지 않을 때는 리턴(실행 중단)하도록 해두는 것이 가장 간단할 것 같습니다.

     

    올려주신 updater.php는 어떤 소스를 참고하여 만드셨는지 모르겠지만, 총 6줄 중 자신있게 OK 해드릴 만한 것이 단 한 줄도 없네요... ㅡ.ㅡ

     

    1. <?php가 아닌 <?로 시작하는 파일은 호스팅 설정에 따라 작동하지 않을 수도 있음

    2. 라이믹스를 사용할 수 있는 PHP 버전 중 mysql_connect 함수가 존재하는 버전이 없음

    3. $sql 쿼리문을 선언하기만 하고 실행을 하지 않음

    4. 쿼리로 DB에서 애드온을 켜더라도 캐시 파일을 갱신하지 않으면 효과가 없음

    5. DB 커넥션을 명시적으로 닫을 필요 없음

    6. 마지막에 ?> 태그를 닫을 필요도 없고, 권장하지도 않음

  • profile profile
    답변 감사합니다.
    SimpleCode님과 마찬가지로 애드온에서 필요한 코드를 사용하는 것과 캐시 파일 갱신에 대해서 말씀주셨네요.