$g4_path 설정 없이 $g4['path'] 자동세팅 정보
$g4_path 설정 없이 $g4['path'] 자동세팅
본문
그누보드에서 페이지를 사용하기 위해서는 $g4_path 라는 상대경로를 설정해주어야 합니다.
그래야 이후에 모든 페이지에서 기본적으로 인클루드 되는 common.php가
$g4['path']을 $g4_path 값으로 세팅을 해줍니다.
현재의 그누보드 common.php에서는 보안 때문에
$g4_path에 웹경로가 들어오는 것만을 막고 있습니다.
그러나...... 웹호스팅 환경일 경우 ../../다른 계정 패스
등으로 악용할 소지가 여전히 남아있습니다.
따라서 common.php의 111 ~ 140 라인을 대신하여
아래의 소스를 복사해서 넣고 저장해줌으로 해서
다른 계정의 패스를 막을수 있습니다.
$dir = dirname($_SERVER['PHP_SELF']);
$tmpdir_common = dirname(str_replace($_SERVER['DOCUMENT_ROOT'] , '', __FILE__));
$tmp = str_replace($tmpdir_common, '', $dir);
$tmpcnt_slash = count(explode('/', $tmp));
if ($tmpcnt_slash > 1) {
$g4['path'] = '';
for ($i = 1; $i < $tmpcnt_slash; $i++){
$g4['path'] .= '../';
}
$g4['path'] = preg_replace("`/$`", '', $g4['path']);
}
else{
$g4['path'] = '.';
}
include_once("$g4[path]/config.php"); // 설정 파일
include_once("$g4[path]/lib/common.lib.php"); // 공통 라이브러리
if (!$g4['url']) {
$g4['url'] = 'http://' . $_SERVER['HTTP_HOST'] . $tmpdir_common;
}
그래야 이후에 모든 페이지에서 기본적으로 인클루드 되는 common.php가
$g4['path']을 $g4_path 값으로 세팅을 해줍니다.
현재의 그누보드 common.php에서는 보안 때문에
$g4_path에 웹경로가 들어오는 것만을 막고 있습니다.
그러나...... 웹호스팅 환경일 경우 ../../다른 계정 패스
등으로 악용할 소지가 여전히 남아있습니다.
따라서 common.php의 111 ~ 140 라인을 대신하여
아래의 소스를 복사해서 넣고 저장해줌으로 해서
다른 계정의 패스를 막을수 있습니다.
$dir = dirname($_SERVER['PHP_SELF']);
$tmpdir_common = dirname(str_replace($_SERVER['DOCUMENT_ROOT'] , '', __FILE__));
$tmp = str_replace($tmpdir_common, '', $dir);
$tmpcnt_slash = count(explode('/', $tmp));
if ($tmpcnt_slash > 1) {
$g4['path'] = '';
for ($i = 1; $i < $tmpcnt_slash; $i++){
$g4['path'] .= '../';
}
$g4['path'] = preg_replace("`/$`", '', $g4['path']);
}
else{
$g4['path'] = '.';
}
include_once("$g4[path]/config.php"); // 설정 파일
include_once("$g4[path]/lib/common.lib.php"); // 공통 라이브러리
if (!$g4['url']) {
$g4['url'] = 'http://' . $_SERVER['HTTP_HOST'] . $tmpdir_common;
}
추천
1
1
댓글 12개

아주 유용한 팁입니다.
유창화님, 정말로 감사드립니다.
유창화님, 정말로 감사드립니다.

도움이 되셨으면 좋겠습니다.
그누보드 자체를 안건딜면서 되는 팁이면 좋겠지만
이것은 그누보드 기본 파일을 수정하는 것이므로
자주 업데이트 되는 환경이라면 매번 수정해줘야하는 번거로움이 있습니다.
제가 항상 느끼는 부분 중 변수사용, 파일명에 대한 부분입니다.
1. 기본 환경 설정 변수는 외부변수의 영향을 받으면 좋지 않습니다. [예] $g4['path'] = $g4_path;
2. 함수내에서 global로 자주 처리되는 변수들 같은 경우는 배열로 통합으로 관리하는 것이 좋습니다. [예]$g4
3. 생각외로 변수의 이름이 아주 중요합니다.
1> 현재 처리에서 임시적으로 사용되는 변수인 경우
꼭 임시 변수임을 나타내는 것이 좋습니다. 그래야 소스전체의 흐름을 읽거나 분석할때, 쉽게 제외해가면서
볼수 있습니다. [예] $tmp......, $temp......
2> 변수이름만으로 이것은 무슨 변수인지 이해가 되어야 좋습니다. [예] $dir_path, $dir_name, $DirPath, $DirName
4. 파일 이름 잘 짖는것도 아주 중요합니다.
파일이름을 잘짖는 것만으로도 코드의 양을 효율적으로 많이 줄일수 있습니다.
[예] 레벨아이콘 출력시 레벨아이콘 파일며을 level_icon_1.gif, level_icon_2.gif.....
이런식으로 짖는 다면 아이콘을 출력하기 위해 다음 한줄이면 충분합니다.
<img src='경로/level_icon_<?=$level?>.gif'>
만약 변수와 파일명의 연관성을 전혀 찾을수 없게끔 파일명을 짖게되면 복잡하게 됩니다.
[예] level_icon_001.gif(1단계아이콘) , level_icon_003.gif(2단계아이콘)
switch($level){
case 1 :
$level_icon = 'level_icon_001.gif';
break;
case 2 :
$level_icon = 'level_icon_003.gif';
break;
......
}
그누보드 자체를 안건딜면서 되는 팁이면 좋겠지만
이것은 그누보드 기본 파일을 수정하는 것이므로
자주 업데이트 되는 환경이라면 매번 수정해줘야하는 번거로움이 있습니다.
제가 항상 느끼는 부분 중 변수사용, 파일명에 대한 부분입니다.
1. 기본 환경 설정 변수는 외부변수의 영향을 받으면 좋지 않습니다. [예] $g4['path'] = $g4_path;
2. 함수내에서 global로 자주 처리되는 변수들 같은 경우는 배열로 통합으로 관리하는 것이 좋습니다. [예]$g4
3. 생각외로 변수의 이름이 아주 중요합니다.
1> 현재 처리에서 임시적으로 사용되는 변수인 경우
꼭 임시 변수임을 나타내는 것이 좋습니다. 그래야 소스전체의 흐름을 읽거나 분석할때, 쉽게 제외해가면서
볼수 있습니다. [예] $tmp......, $temp......
2> 변수이름만으로 이것은 무슨 변수인지 이해가 되어야 좋습니다. [예] $dir_path, $dir_name, $DirPath, $DirName
4. 파일 이름 잘 짖는것도 아주 중요합니다.
파일이름을 잘짖는 것만으로도 코드의 양을 효율적으로 많이 줄일수 있습니다.
[예] 레벨아이콘 출력시 레벨아이콘 파일며을 level_icon_1.gif, level_icon_2.gif.....
이런식으로 짖는 다면 아이콘을 출력하기 위해 다음 한줄이면 충분합니다.
<img src='경로/level_icon_<?=$level?>.gif'>
만약 변수와 파일명의 연관성을 전혀 찾을수 없게끔 파일명을 짖게되면 복잡하게 됩니다.
[예] level_icon_001.gif(1단계아이콘) , level_icon_003.gif(2단계아이콘)
switch($level){
case 1 :
$level_icon = 'level_icon_001.gif';
break;
case 2 :
$level_icon = 'level_icon_003.gif';
break;
......
}

감사합니다... ^^
멋진팁과 강좌 감사합니다.
다 이해는 못하지만 스크랩해놓고 이해될때까지 들여다 보겠습니다.
행복한 저녁 되소서~!!
다 이해는 못하지만 스크랩해놓고 이해될때까지 들여다 보겠습니다.
행복한 저녁 되소서~!!
수정후 G4 외부 경로의 일반 파일에서 G4와 연동되게 사용했던 부분을 어떻게 처리해야 할까요?
G4상위 경로 혹은 같은 레벨의 외부폴더에서 G4와 연동시킨 경우(preloaded등)가 있어서 문의 드립니다.
G4 상위 경로에서 G4실행 예;
_common.php 수정
<?
if(!isset($g4_path)) $g4_path = "."; //태엽푸는새님 - 경로 상관없이 그누보드 실행
//$g4_path = ".";
include_once("$g4_path/common.php");
?>
간단한 인덱스용 일반파일 상단
<?
//if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$g4_path = "g4"; // 그누보드 상대경로 - 실제 설치 디렉토리
include_once("$g4_path/_common.php");
include_once("$g4[path]/head.sub.php");
include_once("$g4[path]/lib/outlogin.lib.php");
include_once("$g4[path]/gnusr/_common/_gnusr_Common.php");//개인설정
?>
내용~~
요렇게 해서 잘 돌아가고 있었는데 common.php 수정후 아래 에러가 발생합니다.
에러 내용은
common.php 수정소스의 아래 구문에서 '$g4[path]'가 '../'로 찍히면서
디비설정파일없음 경고후 인스톨 디렉토리로 이동합니다.
include_once("$g4[path]/config.php"); // 설정 파일
include_once("$g4[path]/lib/common.lib.php"); // 공통 라이브러리
G4상위 경로 혹은 같은 레벨의 외부폴더에서 G4와 연동시킨 경우(preloaded등)가 있어서 문의 드립니다.
G4 상위 경로에서 G4실행 예;
_common.php 수정
<?
if(!isset($g4_path)) $g4_path = "."; //태엽푸는새님 - 경로 상관없이 그누보드 실행
//$g4_path = ".";
include_once("$g4_path/common.php");
?>
간단한 인덱스용 일반파일 상단
<?
//if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$g4_path = "g4"; // 그누보드 상대경로 - 실제 설치 디렉토리
include_once("$g4_path/_common.php");
include_once("$g4[path]/head.sub.php");
include_once("$g4[path]/lib/outlogin.lib.php");
include_once("$g4[path]/gnusr/_common/_gnusr_Common.php");//개인설정
?>
내용~~
요렇게 해서 잘 돌아가고 있었는데 common.php 수정후 아래 에러가 발생합니다.
에러 내용은
common.php 수정소스의 아래 구문에서 '$g4[path]'가 '../'로 찍히면서
디비설정파일없음 경고후 인스톨 디렉토리로 이동합니다.
include_once("$g4[path]/config.php"); // 설정 파일
include_once("$g4[path]/lib/common.lib.php"); // 공통 라이브러리

네 그부분을 위에 설명을 넣을까 하다가 넣지 않았습니다만
그누보드설치경로와 다른 경로의 파일에서 연동된경우에는
위에것데로 하면 에러가 납니다.
제가 권장 드리고 싶은 부분은 공식적인 $g4_path외에
다른 변수를 사용하여 common.php를 적당히 수정하는 것이 좋습니다.
위의 소스의 경우 항상 그누보드 설치경로를 기준으로 상대경로를 반환합니다
그누보드설치경로와 다른 경로의 파일에서 연동된경우에는
위에것데로 하면 에러가 납니다.
제가 권장 드리고 싶은 부분은 공식적인 $g4_path외에
다른 변수를 사용하여 common.php를 적당히 수정하는 것이 좋습니다.
위의 소스의 경우 항상 그누보드 설치경로를 기준으로 상대경로를 반환합니다
잘 알겠습니다.
감사합니다.^^
감사합니다.^^

감사합니다~~!!
당신은 저에게 유용함을 주기위해 태어난듯 하군요
정말 유용한 정보입니다.
정말 유용한 정보입니다. 스크랩하겠습니다
잘읽었습니다..