$g4_path 설정 없이 $g4['path'] 자동세팅 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

$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;
}
추천
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;

......
}
수정후 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_path외에
다른 변수를 사용하여 common.php를 적당히 수정하는 것이 좋습니다.

위의 소스의 경우 항상 그누보드 설치경로를 기준으로 상대경로를 반환합니다
© SIRSOFT
현재 페이지 제일 처음으로