(수정2015.01.16) 그누보드5 상대경로 사용하기 ($g4['path']와 같은 경로) > 그누보드5 팁자료실

그누보드5 팁자료실

(수정2015.01.16) 그누보드5 상대경로 사용하기 ($g4['path']와 같은 경로) 정보

(수정2015.01.16) 그누보드5 상대경로 사용하기 ($g4['path']와 같은 경로)

본문

팁이 되려나 모르겠습니다.
종종 g4용 스킨등을 g5에서 사용할때 생기는 문제때문에 적용해보았습니다.
 
common.php 에 g5_path() 함수가 있습니다.
return $result; 위쪽에 넣어주시고, 다른 G5_ 상수들처럼 G5_PATH2​ 를 사용하시면 됩니다.
 
 <del>
    //$result['path2'] = preg_replace('#/$#', '', str_repeat('../', count(explode('/', dirname($tilde_remove)))-1));
    $result['path2'] = preg_replace('#[/\\\]$#', '', str_repeat('../', count(explode('\/', dirname($tilde_remove)))-1));
    if($result['path2']) {
        define('G5_PATH2', $result['path2']);
    } else {
        define('G5_PATH2', '.');
    }
</del>
 

위의 부분은 엉망이었습니다;
제대로 테스트해보지 않고 올려서 죄송합니다.
수정본 다시 올립니다.
다만 domain/~userid 환경은 테스트를 못해봤습니다.

function g5_path()
{
    $result['path'] = str_replace('\\', '/', dirname(__FILE__));
    $tilde_remove = preg_replace('/^\/\~[^\/]+(.*)$/', '$1', $_SERVER['SCRIPT_NAME']);
    $document_root = str_replace($tilde_remove, '', $_SERVER['SCRIPT_FILENAME']);
    $root = str_replace($document_root, '', $result['path']);
    $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
    $http = 'http' . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 's' : '') . '://';
    $user = str_replace(str_replace($document_root, '', $_SERVER['SCRIPT_FILENAME']), '', $_SERVER['SCRIPT_NAME']);
    $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
    if(isset($_SERVER['HTTP_HOST']) && preg_match('/:[0-9]+$/', $host))
        $host = preg_replace('/:[0-9]+$/', '', $host);
    $result['url'] = $http.$host.$port.$user.$root;


    // 그누보드5 상대경로 사용하기 ($g4['path']와 같은 경로). 2015.01.16.2.dusthand.
    $path1 = $_SERVER['SCRIPT_FILENAME'];
    $tmp1 = preg_match('#^'.$result['path'].'#', dirname($path1), $matches);

    $tmp = preg_replace('#^'.dirname($path1).'#', '', $result['path']);
    if(!$tmp1 && $tmp) { // 그누보드가 현재보다 하위디렉토리면 하위디렉토리명을 가져오기
        $result['path2'] = preg_replace('#^/#', '', $tmp);
    } else { // 그누보드가 현재 또는 상위디렉토리면 상위의 상대경로 가져오기
        $tmp = preg_replace('#'.dirname($tilde_remove).'$#', '', dirname($path1));
        $tmp = preg_replace('#'.$tmp.'#', '', $result['path']); // g5root 웹상대경로
        if($tmp) { // g5root 웹상대경로가 있으면 tilde_remove의 앞에서 g5root 제거
            $tilde_remove = preg_replace('#^'.$tmp.'#', '', $tilde_remove);
        }
        $tmp = explode('/', ($tilde_remove));

        unset($tmp[0]);
        $result['path2'] = preg_replace('#[/\\\]$#', '', str_repeat('../', count($tmp)-1));
    }
    if($result['path2']) {
        define('LS_PATH', $result['path2']);
    } else {
        define('LS_PATH', '.');
    }


    return $result;
}
추천
0

댓글 6개

수정없이는 사용할 수 없고요..
보통 g4용스킨에 많이 사용되는 변수가 $g4['path']가 있는데 이걸 g5용으로 그대로 G5_PATH로만 바꾸면
이미지경로에도 들어가는경우 절대경로이기 때문에 배꼽으로 나오기 쉽습니다.
그런경우는 G5_URL을 쓰면 되긴 하지만 경우에 따라서 is_file()이나 file_exists()로 확인하는 경우에는 또 웹경로로 되어있으니 파일이 없다는 결과를 리턴해주어 원하는 결과가 안나올 수 있습니다.
그런경우 $g4['path']처럼 상대경로로 두가지 모두 대응하려고 하는 경우에 사용하려는 용도입니다.
로컬에서만 테스트하다보니 생각치 못한 문제가 생기는군요.
    $result['path2'] = preg_replace('#[/\\\]$#', '', str_repeat('../', count(explode('\/', dirname($tilde_remove)))-1));
수정됐습니다.
현재 g4 -> g5 업그레이드 중에 있습니다.
Warning: include_once(/lib/outlogin.lib.php): failed to open stream: No such file or directory in C:\xampp\htdocs\inc\top1.php on line 5

등 등 처럼 많은 파일이 경로를 못찾는데요.
말씀하신대로 작업하면 될까요?
즉 g4 경로를 g5로 바꿔버리면?
초보자기때문에 너무 어렵게 느껴집니다.. ㅜ.ㅜ
전체 2,435 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT