함수 목록 :



clone($object) 

iconv($in_charset, $out_charset, $str) 

&getModule($module_name, $type = 'view', $kind = '') 

&getController($module_name) 

&getAdminController($module_name) 

&getView($module_name) 

&getMobile($module_name) 

&getAdminView($module_name) 

&getModel($module_name) 

&getAdminModel($module_name) 

&getAPI($module_name) 

&getWAP($module_name) 

&getClass($module_name) 

executeQuery($query_id, $args = null) 

executeQueryArray($query_id, $args = null) 

getNextSequence() 

getUrl() 

getNotEncodedUrl() 

getFullUrl() 

getNotEncodedFullUrl() 

getSiteUrl() 

getNotEncodedSiteUrl() 

getFullSiteUrl() 

isSiteID($domain) 

cut_str($string,$cut_size=0,$tail = '...') 

zgap() 

ztime($str) 

getTimeGap($date, $format = 'Y.m.d') 

getMonthName($month, $short = true) 

zdate($str, $format = 'Y-m-d H:i:s', $conversion=true) 

debugPrint($debug_output = null, $display_option = true, $file = '_debug_message.php') 

getMicroTime() 

delObjectVars($target_obj, $del_obj) 

handleError($errno, $errstr, $file, $line) 

getNumberingPath($no, $size=3) 

url_decode($str) 

removeHackTag($content) 

checkXmpTag($content) 

removeSrcHack($matches) 

_isHackedSrcExp($style) 

_isHackedSrc($src) 

fixQuotation($matches) 

hexrgb($hexstr) 

mysql_pre4_hash_password($password) 

getScriptPath() 

utf8RawUrlDecode ($source) 

_code2utf($num)

detectUTF8($string, $return_convert = false, $urldecode = true) 

json_encode2($data) 

isCrawler($agent = null) 

stripEmbedTagForAdmin(&$content, $writer_member_srl)

requirePear()



[ 기본 함수 ] 


XE 위키(Wiki)에서 SMaker, 하늘03, sol님의 설명글의 내용을 가져왔다. 함수의 쓰임새와 방법 등을 이해하는데 기초적인 자료가 된다. 지금 당장 이해할 수 없어도 일단 노트에 적어보자.(나는 전공자가 아니다...^^) 나중에 다시 찾아보기 쉽도록 정리해 두고 이해한 만큼 주석을 달아보자! (■는 위키문서에 없는 부분을 추가해 보았다.)

관련자료 : http://xe.xpressengine.net/18252055


모듈(Module) 관련 함수 정의 :


ModuleHandler::getModuleObject($module_name, $type)을 쓰기 쉽게 함수로 선언

// module_name은 모듈의 이름이다. 

// 타입은 disp, proc, controller, class 이다. 

// 종류(Kind)는 admin, null 로 구분한다. 

// 반환(return)은 module instance(모듈 인스턴스)이다. 


function &getModule($module_name, $type = 'view', $kind = '') {

   return ModuleHandler::getModuleInstance($module_name, $type, $kind);

}


instance getController(string MODULE_NAME)


모듈의 Controller 인스턴스를 가져오기 위한 함수입니다.


    function &getController($module_name) {

        return getModule($module_name, 'controller');

    }


// document.controller.class 인스턴스를 갖고 오고 싶다면

$oDocumentController = &getController('document');


instance getAdminController(string MODULE_NAME)


모듈의 Admin Controller 인스턴스를 가져오기 위한 함수입니다.


    function &getAdminController($module_name) {

        return getModule($module_name, 'controller','admin');

    }


// documentAdminController 인스턴스를 갖고 오고 싶다면

$oDocumentAdminController = &getAdminController('document');


instance getView(string MODULE_NAME)


모듈의 View 인스턴스를 가져오기 위한 함수입니다.


    function &getView($module_name) {

        return getModule($module_name, 'view');

    }


// rssView 인스턴스를 갖고 오고 싶다면

$oRssView = &getView('rss');


instance getMobile(string MODULE_NAME) ■


모듈의 Mobile 인스턴스를 가져오기 위한 함수입니다.


    function &getMobile($module_name) {

        return getModule($module_name, 'mobile');

    }


instance getAdminView(string MODULE_NAME)


모듈의 Admin View 인스턴스를 가져오기 위한 함수입니다.


    function &getAdminView($module_name) {

        return getModule($module_name, 'view','admin');

    }


// adminAdminView 인스턴스를 갖고 오고 싶다면

$oAdminAdminView = &getAdminView('admin');


instance getModel(string MODULE_NAME)


모듈의 Model 인스턴스를 가져오기 위한 함수입니다.


    function &getModel($module_name) {

        return getModule($module_name, 'model');

    }


// documentModel 인스턴스를 갖고 오고 싶다면

$oDocumentModel = &getModel('document');


instrance getAdminModel(string MODULE_NAME)


모듈의 Admin Model 인스턴스를 가져오기 위한 함수입니다.


    function &getAdminModel($module_name) {

        return getModule($module_name, 'model','admin');

    }


// documentAdminModel 인스턴스를 갖고 오고 싶다면

$oDocumentAdminModel = &getAdminModel('document');


instance getAPI(string MODULE_NAME)


모듈의 API 인스턴스를 가져오기 위한 함수입니다.


    function &getAPI($module_name) {

        return getModule($module_name, 'api');

    }


// boardAPI 인스턴스를 갖고 오고 싶다면

$oBoardAPI = &getAPI('board');


instance getWAP(string MODULE_NAME)


모듈의 WAP 인스턴스를 가져오기 위한 함수입니다.


    function &getWAP($module_name) {

        return getModule($module_name, 'wap');

    }


// boardWAP 인스턴스를 갖고 오고 싶다면

$oBoardWAP = &getWAP('board');


instance getClass(string MODULE_NAME)


모듈의 Class 인스턴스를 가져오기 위한 함수입니다.


    function &getClass($module_name) {

        return getModule($module_name, 'class');

    }


// documentClass 인스턴스를 갖고 오고 싶다면

$oDocumentClass = &getClass('document');


DB 관련 함수 정의 :


Object executeQuery(string QUERY_ID, stdClass PARAM)


    /**

     * @brief DB::executeQuery() 의 alias

     * @param query_id 쿼리 ID ( 모듈명.쿼리XML파일 )

     * @param args object 변수로 선언된 인자값

     * @return 처리결과

     **/

    function executeQuery($query_id, $args = null) {

        $oDB = &DB::getInstance();

        return $oDB->executeQuery($query_id, $args);

    }


XML Query를 실행하기 위한 함수입니다. 결과는 Object class의 객체로 return 됩니다.

쿼리 실패는 Object::toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.

select문의 결과 데이터는 Object::data 변수에 담겨져 return 됩니다.


Object executeQueryArray(string QUERY_ID, stdClass PARAM)


    /**

     * @brief DB::executeQuery() 의 결과값을 무조건 배열로 처리하도록 하는 함수

     * @param query_id 쿼리 ID ( 모듈명.쿼리XML파일 )

     * @param args object 변수로 선언된 인자값

     * @return 처리결과

     **/

    function executeQueryArray($query_id, $args = null) {

        $oDB = &DB::getInstance();

        $output = $oDB->executeQuery($query_id, $args);

        if(!is_array($output->data) && count($output->data) > 0){

            $output->data = array($output->data);

        }

        return $output;

    }


executeQuery()와 기능이 같으나 select 시 Object::data 변수에 결과 row가 1개라도 array로 반환됩니다.


int getNextSequence()


    /**

     * @brief DB::getNextSequence() 의 alias

     * @return big int

     **/

    function getNextSequence() {

        $oDB = &DB::getInstance();

        return $oDB->getNextSequence();

    }


다음 Sequence 번호를 가져오기 위한 함수 입니다.

XE 에서는 내부적으로 하나의 Sequence 를 쓰는데요 member_srl, module_srl, document_srl 등 모든 키는 다 이 함수로 받아 설정됩니다. document_srl이 +1씩 순차적으로 늘어나지 않지만 이점이 많이 XE에서는 이러한 방법으로 Sequence를 쓰고 있습니다.


URL 관련 함수 정의 :


string getUrl(['',] string KEY, string VALUE [,string KEY, string VALUE ...])


    /**

     * @brief Context::getUrl()를 쓰기 쉽게 함수로 선언

     * @return string

     *

     * getUrl()은 현재 요청된 RequestURI에 주어진 인자의 값으로 변형하여 url을 리턴한다.

     * 1. 인자는 (key, value)... 의 형식으로 주어져야 한다.

     *    ex) getUrl('key1','val1', 'key2', '') : key1, key2를 val1과 '' 로 변형

     * 2. 아무런 인자가 없으면 argument를 제외한 url을 리턴

     * 3. 첫 인자값이 '' 이면 RequestUri에다가 추가된 args_list로 url을 만듬

     **/

    function getUrl() {

        $num_args = func_num_args();

        $args_list = func_get_args();


        if(!$num_args) return Context::getRequestUri();


        return Context::getUrl($num_args, $args_list);

    }


Url을 만드는 함수 입니다. 

현재 요청된 RequestURI에 주어진 인자의 값으로 변형하여 url을 리턴을 하고 첫 인자값이 '' 이면 RequestUri에다가 추가된 args_list로 url을 만듭니다.


string getFullUrl(['',] string KEY, string VALUE [,string KEY, string VALUE ...])


    /**

     * @brief getUrl()의 값에 request uri를 추가하여 reutrn

     * full url을 얻기 위함

     **/

    function getFullUrl() {

        $num_args = func_num_args();

        $args_list = func_get_args();

        $request_uri = Context::getRequestUri();

        if(!$num_args) return $request_uri;


        $url = Context::getUrl($num_args, $args_list);

        if(!preg_match('/^http/i',$url)){

            preg_match('/^(http|https):\/\/([^\/]+)\//',$request_uri,$match);

            return substr($match[0],0,-1).$url;

        }

        return $url;

    }


http:// 로 시작하는 Url을 만드는 함수입니다.


string getNotEncodedFullUrl(['',] string KEY, string VALUE [,string KEY, string VALUE ...])


    function getNotEncodedFullUrl() {

        $num_args = func_num_args();

        $args_list = func_get_args();

        $request_uri = Context::getRequestUri();

        if(!$num_args) return $request_uri;


        $url = Context::getUrl($num_args, $args_list);

        if(!preg_match('/^http/i',$url)){

            preg_match('/^(http|https):\/\/([^\/]+)\//',$request_uri,$match);

            $url = Context::getUrl($num_args, $args_list, null, false);

            return substr($match[0],0,-1).$url;

        }

        return $url;

    }


encode 되지 않은 Url을 만드는 함수입니다.

getFullUrl()와 기능이 같습니다.


string getSiteUrl(string DOMAIN, ['',] string KEY, string VALUE [,string KEY, string VALUE ...])


    /**

     * @brief Context::getUrl()를 쓰기 쉽게 함수로 선언

     * @return string

     *

     * getSiteUrl()은 지정된 도메인에 대해 주어진 인자의 값으로 변형하여 url을 리턴한다\n

     * 첫 인자는 도메인(http://등이 제외된)+path 여야 함.

     **/

    function getSiteUrl() {

        $num_args = func_num_args();

        $args_list = func_get_args();


        if(!$num_args) return Context::getRequestUri();


        $domain = array_shift($args_list);

        $num_args = count($args_list);


        return Context::getUrl($num_args, $args_list, $domain);

    }


가상사이트를 위한 Url을 만드는 함수입니다. 첫 인자 DOMAIN에는 도메인 또는 vid를 받습니다.


string getNotEncodedSiteUrl(string DOMAIN, ['',] string KEY, string VALUE[,string KEY, string VALUE...])


    function getNotEncodedSiteUrl() {

        $num_args = func_num_args();

        $args_list = func_get_args();


        if(!$num_args) return Context::getRequestUri();


        $domain = array_shift($args_list);

        $num_args = count($args_list);


        return Context::getUrl($num_args, $args_list, $domain, false);

    }


encode 되지 않은 URL을 만드는 함수입니다. getSiteUrl()와 기능이 같습니다.


string getFullSiteUrl(string DOMAIN, ['',] string KEY, string VALUE [,string KEY, string VALUE ...])


    /**

     * @brief getSiteUrl()의 값에 request uri를 추가하여 reutrn

     * full url을 얻기 위함

     **/

    function getFullSiteUrl() {

        $num_args = func_num_args();

        $args_list = func_get_args();


        $request_uri = Context::getRequestUri();

        if(!$num_args) return $request_uri;


        $domain = array_shift($args_list);

        $num_args = count($args_list);


        $url = Context::getUrl($num_args, $args_list, $domain);

        if(!preg_match('/^http/i',$url)){

            preg_match('/^(http|https):\/\/([^\/]+)\//',$request_uri,$match);

            return substr($match[0],0,-1).$url;

        }

        return $url;

    }


가상사이트를 위한 http:// 로 시작하는 Url을 만드는 함수입니다.


string isSiteID(string DOMAIN) ■


    /**

     * @brief 가상사이트의 Domain이 url형식인지 site id인지 return

     **/

    function isSiteID($domain) {

        return preg_match('/^([a-z0-9\_]+)$/i', $domain);

    }



문자열 관련 함수 정의 :


string cut_str(string STRING, int CUT_SIZE, string TAIL)


    /**

     * @brief 주어진 문자를 주어진 크기로 자르고 잘라졌을 경우 주어진 꼬리를 담

     * @param string 자를 원 문자열

     * @param cut_size 주어진 원 문자열을 자를 크기

     * @param tail 잘라졌을 경우 문자열의 제일 뒤에 붙을 꼬리

     * @return string

     **/


문자열을 일정한 길이에 맞게 잘라서 뒤에 꼬리를 붙여주는 함수입니다.


시간 관련 함수 정의 :


int ztime(string STR)



YYYYMMDDHHIISS 형식의 시간값을 unix time으로 변경

// str : YYYYMMDDHHIISS 형식의 시간값

// return : int


string getTimeGap(string DATE, string FORMAT)



YmdHis의 시간 형식을 지금으로 부터 몇분/몇시간전인지를 문자열로 출력하는 함수입니다.

// YmdHis의 시간 형식을 지금으로 부터 몇분/몇시간전, 1일 이상 차이나면 format string return


string getMonthName(int MONTH, bool SHORT)



월 이름을 출력하는 함수입니다.

// 예) 1월 → January, 7월 → July


string zdate(string STR, string FORMAT, bool CONVERSION)


    /**

     * @brief YYYYMMDDHHIISS 형식의 시간값을 원하는 시간 포맷으로 변형

     * @param string|int str YYYYMMDDHHIISS 형식의 시간 값

     * @param string format php date()함수의 시간 포맷

     * @param bool conversion 언어에 따라 날짜 포맷의 자동변환 여부

     * @return string

     **/


YYYYMMDDHHIISS 형식의 시간값을 원하는 시간 포맷으로 만들어 주는 함수입니다.


string getMicroTime() ■


    function getMicroTime() {

        list($time1, $time2) = explode(' ', microtime());

        return (float)$time1 + (float)$time2;

    }


// microtime() return


기타 함수 정의 :


debugPrint(mixed OBJECT)



디버깅을 하기 위한  함수 입니다.

XE_ROOT/config/config.inc.php 파일에 __DEBUG__ 값이 1이상으로 정의되어 있어야 합니다.

__DEBUG_OUTPUT__ 값에 따라 결과값을 받을 방법을 선택할 수 있습니다.


     * 0 : files/_debug_message.php 에 연결하여 출력

     * 1 : HTML 최하단에 주석으로 출력 (Response Method가 HTML 일 때)

     * 2 : Firebug 콘솔에 출력 (PHP >= 5.2.0. Firebug/FirePHP 플러그인 필요)



delObjectVars($target_obj, $del_obj) ■


    /**

     * @brief 첫번째 인자로 오는 object var에서 2번째 object의 var들을 제거

     * @param target_obj 원 object

     * @param del_obj 원 object의 vars에서 del_obj의 vars를 제거한다

     * @return object

     **/


handleError($errno, $errstr, $file, $line) ■


    /**

     * @brief php5 이상에서 error_handing을 debugPrint로 변경

     * @param errno

     * @param errstr

     * @return file

     * @return line

     **/

    function handleError($errno, $errstr, $file, $line) {

        if(!__DEBUG__) return;

        $errors = array(E_USER_ERROR, E_ERROR, E_PARSE);

        if(!in_array($errno, $errors)) return;


        $output = sprintf("Fatal error : %s - %d", $file, $line);

        $output .= sprintf("%d - %s", $errno, $errstr);


        debugPrint($output);

    }


getNumberingPath($no, $size=3) ■


    /**

     * @brief 주어진 숫자를 주어진 크기로 recursive하게 잘라줌

     * @param no 주어진 숫자

     * @param size 잘라낼 크기

     **/

    function getNumberingPath($no, $size=3) {

        $mod = pow(10, $size);

        $output = sprintf('%0'.$size.'d/', $no%$mod);

        if($no >= $mod) $output .= getNumberingPath((int)$no/$mod, $size);

        return $output;

    }


url_decode($str) ■


    /**

     * @brief 한글이 들어간 url의 decode

     **/

    function url_decode($str) {

        return preg_replace('/%u([[:alnum:]]{4})/', '&#x\\1;',$str);

    }


보안관련 함수 정의 :


string removeHackTag(string CONTENT)


    /**

     * @brief 해킹 시도로 의심되는 코드들을 미리 차단

     **/

    function removeHackTag($content) {

        // 특정 태그들을 일반 문자로 변경

        $content = preg_replace('/<(\/?)(iframe|script|meta|style|applet|link|base|html|body)/is', '<$1$2', $content);


        /**

         * 이미지나 동영상등의 태그에서 src에 관리자 세션을 악용하는 코드를 제거

         * - 취약점 제보 : 김상원님

         **/

        $content = preg_replace_callback("!<(/?)([a-z]+)(.*?)>!is", removeSrcHack, $content);


        // xmp tag 확인 및 추가

        $content = checkXmpTag($content);


        return $content;

    }


해킹 시도로 의심될만한 코드들을 걸러주는 함수입니다.


checkXmpTag($content)


// xmp tag 확인 및 닫히지 않은 경우 추가


removeSrcHack($matches)


// xmp tag 정리

// src값에 module=admin이라는 값이 입력되어 있으면 이 값을 무효화 시킴


fixQuotation($matches)


// attribute의 value를 " 로 둘러싸도록 처리하는 함수


bool isCrawler(string AGENT)


    function isCrawler($agent = null) {

        if(!$agent) $agent = $_SERVER['HTTP_USER_AGENT'];

        $check_agent = array('bot', 'spider', 'google', 'yahoo', 'daum', 'teoma', 'fish', 'hanrss', 'facebook');

        $check_ip = array(

            '211.245.21.11*' /* mixsh */

        );


        foreach($check_agent as $str) {

            if(stristr($agent, $str) != FALSE) return true;

        }


        $check_ip = '/^('.implode($check_ip, '|').')/';

        $check_ip = str_replace('.', '\.', $check_ip);

        $check_ip = str_replace('*', '.+', $check_ip);

        $check_ip = str_replace('?', '.?', $check_ip);


        if(preg_match($check_ip, $_SERVER['REMOTE_ADDR'], $matches)) return true;


        return false;

    }


접속자의 User Agent와 IP를 검사하여 로봇 여부를 확인하는 함수입니다.


stripEmbedTagForAdmin(&$content, $writer_member_srl) ■


    function stripEmbedTagForAdmin(&$content, $writer_member_srl) {

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

        $oModuleModel = &getModel('module');

        $logged_info = Context::get('logged_info');


        if($writer_member_srl != $logged_info->member_srl && ($logged_info->is_admin == "Y" || $oModuleModel->isSiteAdmin($logged_info)) )

        {

            if($writer_member_srl)

            {

                $oMemberModel =& getModel('member');

                $member_info = $oMemberModel->getMemberInfoByMemberSrl($writer_member_srl);

                if($member_info->is_admin == "Y")

                {

                    return;

                }

            }

            $security_msg = "

".Context::getLang('security_warning_embed')."

";

            $content = preg_replace('/]+>?(.*?<\/object>)?/is', $security_msg, $content);

            $content = preg_replace('/]+>?(\s*<\/embed>)?/is', $security_msg, $content);

            $content = preg_replace('/]+editor_component="multimedia_link"[^>]*>?(\s*<\/img>)?/is', $security_msg, $content);

        }


        return;

    }


공지사항 자동생성 자막

2018-10-22 16:06:41 자막 닫기
전체 관련글 전체관련글
  • **의 신
    C:\APM_Setup\htdocs\xe\config\func.inc.php on line 881 xemaker 2017.03.26 08:23 C:\APM_Setup\htdocs\xe... 폴더를 PHP5_Backup 으로 하고 PHP5 폴더를 새로 만들어서 php 파일을 다운받아 PHP5에...
    20170326신고
  • **빛 슈베리세상 :D
    파일 이름도 볼 수 있습니다. * .class.inc // 클래스 정의 만 * .impl.inc // 인터페이스 * .func.inc // 함수 군 정의 만 define.inc // 상수 config.inc // 설정 파일 * .tpl // 템플릿 * .dat // 데이터 파일 * .inc.php...
    20180627신고
  • **amjo's Blog
    $__FUNC_PHP__ ) { $__FUNC_PHP__ = 1; // 처음 몇개는 자바스크립트를 처리하는 함수입니... echo "// --> </script> "; } // FreadAll($filename) : $filename에 해당하는 파일내용 전체를...
    20100328신고
  • **
    클래스 라이브러리 삽입 require_once("xajax.inc.php"); XAJAX 공식 홈페이지에서 파일... xajax.inc.php 를 프로그램 처음에 삽입하면 된다. Step 2 : 서버측 XAJAX 함수 작성 function...
    20060629신고
  • **를 위해
    함수적 접근은 메소드를 데이터로 취급한다. 서비스 지향적 접근은 데이터와 그 데이터를... 여러분은 PLINQ가 어떻게 다중 코어와 다중 CPU 사이에서 복잡한 알고리즘을 쉽게 분해할 수 있는지를 볼...
    20190326신고
  • **맛나는 세상
    PHP Data Access 소개 기사에 이어 이번 시간에는 PHP에서 데이터 액세스를 담당할 함수를... 하면 다른 라이브러리와 있을 수 있는 이름충돌을 예방할 수 있거든요. 파일: settings.inc.php...
    20051115신고
  • **하자
    < Immunity Debugger > C:\Immunity Inc\Immunity Debugger\PyCommands에 PyCommand 파일 저장, 상단메뉴에서... 어플리케이션의 힙, 스택, 공유 라이브러리가 프로세스의 가상주소공간에 맵핑되는...
    20190116신고
  • **이는 살아있따
    fpdf 정말 단순 텍스트만 출력가능하다다른 라이브러리들의 원조(?)가 되는 코드라고 볼... 이 함수는 리눅스 환경에서라면 php 컴파일시 mb_string에 관련된 함수를 사용할 수 있도록 컴파일...
    20130212신고
  • **
    func_2(5) //25 import os # 외장함수 os.getcwd() # get current working directory 라이브러리(Library == Package) module은 파이썬 파일 하나를 말한다. library가 module의 상위개념 php...
    20190219신고
  • **의 자기 [개발 And 계발] Story
    XE 코어도 xe/classes/mobile/Mobile.class.php 문서에서 $_SERVER['HTTP_USER_AGENT'] 를 이용해 (iPod|iPhone... 단, 호스팅 서버에서 httpd.conf 파일 설정에 AddType application/x-httpd-php .php .php3 .inc .ph .htm .html...
    20110909신고
  • 83%남자
    17%여자
    1%10대
    12%20대
    29%30대
    32%40대
    20%50대
    6%60대
    통계정보는 댓글이 100개 이상 게시중일때 제공됩니다.
댓글 0