테스트 사이트 - 개발 중인 베타 버전입니다

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

· 10년 전 · 9453 · 6
팁이 되려나 모르겠습니다.
종종 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 환경은 테스트를 못해봤습니다.
[code]
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;
}
[/code]

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 6개

그렇게 하면 g4용 스킨을 g5에서 그대로 사용할 수 있다는 뜻인가요?
수정없이는 사용할 수 없고요..
보통 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));
수정됐습니다.
다시 수정됐습니다. ㅜㅜ
7년 전
현재 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로 바꿔버리면?
초보자기때문에 너무 어렵게 느껴집니다.. ㅜ.ㅜ

게시글 목록

번호 제목
2410
2401
2395
2387
2385
2377
2374
2372
2368
2367
2366
2364
2354
2353
2352
2349
2333
2329
2327
2304
2298
2297
2295
2288
2282
2279
2278
2276
2273
2268