같은 계정내에서는 경로가 달라도 $g4['path'] 자동세팅 정보
같은 계정내에서는 경로가 달라도 $g4['path'] 자동세팅
본문
아래 올린 내용의 보강입니다. ( http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=5083 )
아래내용은 같은 계정내의 그누보드와 같은 경로나 하위 경로와 연동 될경우에만
자동 변수 세팅이 되는 형태였습니다.
이번에 올리는 것은
같은 계정내의 DOCUMENT_ROOT 하위라면 어떠한 경로에서 연동되더라도 $g4['path'] 가
$g4_path 설정없이 자동으로 세팅되도록 처리 한 것입니다.
이하 소스를 common.php의 111 ~ 140 라인을 대신하여
삽입하고 저장하시면 됩니다.
$dir = dirname($_SERVER['PHP_SELF']);
$tmpdir_common = dirname(str_replace($_SERVER['DOCUMENT_ROOT'] , '', __FILE__));
if (preg_match("`^" . $tmpdir_common . "`", $dir)){//현재 파일의 경로가 그누보드 기본 경로와 일치하거나 하위의 경로일 경우
$tmp = preg_replace("`^" . $tmpdir_common . "`", '', $dir);
if (empty($tmp))
$g4['path'] = '.';
else
$g4['path'] = preg_replace("`/[^/]+`", '../', $tmp);
}
else if (preg_match("`^" . $dir . "`", $tmpdir_common)){//현재 파일의 경로가 그누보드 상위 경로일 경우
$g4['path'] = './' . preg_replace("`^" . $dir . "`", '', $tmpdir_common);
}
else {//현재 파일의 경로가 그누보드 기본 경로와 다른 경로일 경우
$tmp = explode('/', $dir);
$tmp2 = explode('/', $tmpdir_common);
$tmp_samedir = '';
$tmp_path = '';
foreach($tmp as $key => $val){
if ($tmp[$key] == $tmp2[$key]) {
$tmp_samedir .= $tmp[$key] . '/';
continue;
}
$tmp_path .= '../';
}
$g4['path'] = $tmp_path . preg_replace("`^" . $tmp_samedir . "`", '', $tmpdir_common);
}
$g4['path'] = preg_replace(array("`/$`", "`//+`"), array('', '/'), $g4['path']);
if (empty($g4['path'])) $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;
}
플록님의 의견을 반영하여 수정된 부분입니다.
좀 더 간결하게 수정하였습니다.
최상위일때 $g4['path']에 아무값도 안지정되는 경우를 . 으로 지정되게 수정하였습니다.
아래내용은 같은 계정내의 그누보드와 같은 경로나 하위 경로와 연동 될경우에만
자동 변수 세팅이 되는 형태였습니다.
이번에 올리는 것은
같은 계정내의 DOCUMENT_ROOT 하위라면 어떠한 경로에서 연동되더라도 $g4['path'] 가
$g4_path 설정없이 자동으로 세팅되도록 처리 한 것입니다.
이하 소스를 common.php의 111 ~ 140 라인을 대신하여
삽입하고 저장하시면 됩니다.
$dir = dirname($_SERVER['PHP_SELF']);
$tmpdir_common = dirname(str_replace($_SERVER['DOCUMENT_ROOT'] , '', __FILE__));
if (preg_match("`^" . $tmpdir_common . "`", $dir)){//현재 파일의 경로가 그누보드 기본 경로와 일치하거나 하위의 경로일 경우
$tmp = preg_replace("`^" . $tmpdir_common . "`", '', $dir);
if (empty($tmp))
$g4['path'] = '.';
else
$g4['path'] = preg_replace("`/[^/]+`", '../', $tmp);
}
else if (preg_match("`^" . $dir . "`", $tmpdir_common)){//현재 파일의 경로가 그누보드 상위 경로일 경우
$g4['path'] = './' . preg_replace("`^" . $dir . "`", '', $tmpdir_common);
}
else {//현재 파일의 경로가 그누보드 기본 경로와 다른 경로일 경우
$tmp = explode('/', $dir);
$tmp2 = explode('/', $tmpdir_common);
$tmp_samedir = '';
$tmp_path = '';
foreach($tmp as $key => $val){
if ($tmp[$key] == $tmp2[$key]) {
$tmp_samedir .= $tmp[$key] . '/';
continue;
}
$tmp_path .= '../';
}
$g4['path'] = $tmp_path . preg_replace("`^" . $tmp_samedir . "`", '', $tmpdir_common);
}
$g4['path'] = preg_replace(array("`/$`", "`//+`"), array('', '/'), $g4['path']);
if (empty($g4['path'])) $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;
}
플록님의 의견을 반영하여 수정된 부분입니다.
좀 더 간결하게 수정하였습니다.
최상위일때 $g4['path']에 아무값도 안지정되는 경우를 . 으로 지정되게 수정하였습니다.
추천
1
1
댓글 19개
유창화님 감사드립니다.
고민을 한방에 해결해 주셨습니다.^^
//$tmp_path .= '../';
$tmp_path .= './';
이렇게 수정해서 상위 경로에서 연동해도 문제가 없겠는지요?
고민을 한방에 해결해 주셨습니다.^^
//$tmp_path .= '../';
$tmp_path .= './';
이렇게 수정해서 상위 경로에서 연동해도 문제가 없겠는지요?

그 부분을 수정하시면 안됩니다.
위에 처럼 해서 되지 않는 부분이 있습니까?
그럼 제가 한번 살펴보게 해주십시오.
보강해보겠습니다.
위에 처럼 해서 되지 않는 부분이 있습니까?
그럼 제가 한번 살펴보게 해주십시오.
보강해보겠습니다.
설치경로 http://phosay.com/g4
http://phosay.com/index2.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");
?>
현재 유창화님 소스코드를 적용했놓았습니다.
아래 경로에서 에러 내용을 확인해보세요.
http://phosay.com/index2.php
참고로 $tmp_path .= './'; 으로 수정하면 정상적으로 동작합니다.
http://phosay.com/index2.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");
?>
현재 유창화님 소스코드를 적용했놓았습니다.
아래 경로에서 에러 내용을 확인해보세요.
http://phosay.com/index2.php
참고로 $tmp_path .= './'; 으로 수정하면 정상적으로 동작합니다.

아네 그런 경우가 있었군요
네 그부분도 되도록 추가했습니다.
위의 코드를 다시 복사해서 사용하십시오.
기존 소스에서 if (preg_match("`^" . $dir . "`", $tmpdir_common) && $tmp_path == '../') $tmp_path = './';
을 추가했습니다.
현재 실행되는 파일의 디렉토리 경로가 그누보드 설치 디렉토리에 포함되는 경우에
./ 부터 시작되도록 수정한것입니다.
네 그부분도 되도록 추가했습니다.
위의 코드를 다시 복사해서 사용하십시오.
기존 소스에서 if (preg_match("`^" . $dir . "`", $tmpdir_common) && $tmp_path == '../') $tmp_path = './';
을 추가했습니다.
현재 실행되는 파일의 디렉토리 경로가 그누보드 설치 디렉토리에 포함되는 경우에
./ 부터 시작되도록 수정한것입니다.
적용하고 확인했습니다.
깊이 감사 드립니다.
깊이 감사 드립니다.

좀 더 간결하게 수정하였습니다.

[사용예] 위의 내용으로 common.php를 수정 저장한 연후에
그누보드의 기본 index.php 를 같은 계정내 DOCUMENT_ROOT내의 아무곳에나 복사해서 저장합니다.
index.php 의 2라인 include_once("./_common.php");
이부분을 include_once("그부보드의 상대경로 또는 절대 경로/common.php");
로 수정하고,
include_once("./ 로 되어있는 부분들을
include_once($g4['path'] . "/ 로 모두 바꾸어주고 저장한 연후에,
웹에서 확인하면
그누보드 설치 디렉토리 index.php와 동일하게 나타나며
경로가 꼬이는 등의 경우는 없습니다.
그누보드의 기본 index.php 를 같은 계정내 DOCUMENT_ROOT내의 아무곳에나 복사해서 저장합니다.
index.php 의 2라인 include_once("./_common.php");
이부분을 include_once("그부보드의 상대경로 또는 절대 경로/common.php");
로 수정하고,
include_once("./ 로 되어있는 부분들을
include_once($g4['path'] . "/ 로 모두 바꾸어주고 저장한 연후에,
웹에서 확인하면
그누보드 설치 디렉토리 index.php와 동일하게 나타나며
경로가 꼬이는 등의 경우는 없습니다.
친절한 설명까지 감사합니다.
기존 외부 연동을 위해서는 태옆푸는새님의 _common.php 아래처럼 수정후 적용해야 했는데
//$g4_path = ".";
if(!isset($g4_path)) $g4_path = "."; //태엽푸는새님 - 경로 상관없이 그누보드 실행
include_once("$g4_path/common.php");
유창화님 소스코드로 대체후 직접 common.php 경로만 잡아주니까 잘 동작합니다.
원본 g4/_common.php를 거치는 방식은 동작하지 않는점은 저같은 초보입장에서 적용시 주의해야할 사항으로 보입니다.
보안을 위해 애써주신 막강팁인데 외부연동 관련 코멘트로 도배해서 죄송합니다.
거듭 감사의 말씀 올립니다.
기존 외부 연동을 위해서는 태옆푸는새님의 _common.php 아래처럼 수정후 적용해야 했는데
//$g4_path = ".";
if(!isset($g4_path)) $g4_path = "."; //태엽푸는새님 - 경로 상관없이 그누보드 실행
include_once("$g4_path/common.php");
유창화님 소스코드로 대체후 직접 common.php 경로만 잡아주니까 잘 동작합니다.
원본 g4/_common.php를 거치는 방식은 동작하지 않는점은 저같은 초보입장에서 적용시 주의해야할 사항으로 보입니다.
보안을 위해 애써주신 막강팁인데 외부연동 관련 코멘트로 도배해서 죄송합니다.
거듭 감사의 말씀 올립니다.
감사합니다..

최상위일때 $g4['path']에 아무값도 안지정되는 경우를 . 으로 지정되게 수정하였습니다.
경로에 대한 고민을 깨끗하게 날려버리셨네요. 감사^^
2
와 정말 잘되네요...^^
감사합니다.
감사합니다.
좋은정보..^^
고맙읍니다.
고맙읍니다
이글 스크랩하니 스크랩페이지에 다음과 같은 에러가 나오네요.
insert into g4_board_new set bo_table = 'g4_tiptech', wr_id = '22708', wr_parent = '5119', mb_id = 'hyungsir', wr_name = '흰새벽', wr_is_comment = '1', wr_comment = '', wr_option = '', wr_subject = '같은 계정내에서는 경로가 달라도 $g4['path'] 자동세팅', wr_last = '2010-02-10 02:04:33', bn_datetime = '2010-02-10 02:04:33', bn_date = '2010-02-10', wr_ip = '220.74.48.215'
1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'path'] 자동세팅', wr_last = '2010-02-10 02:04:33', ' at line 10
error file : /bbs/scrap_popin_update.php
관리하시는분 살펴보세요.
스크랩은 안되고 저 위에 코멘트는 달려지네요.
저 코멘트는 스크랩창에서 적은 것인데...
insert into g4_board_new set bo_table = 'g4_tiptech', wr_id = '22708', wr_parent = '5119', mb_id = 'hyungsir', wr_name = '흰새벽', wr_is_comment = '1', wr_comment = '', wr_option = '', wr_subject = '같은 계정내에서는 경로가 달라도 $g4['path'] 자동세팅', wr_last = '2010-02-10 02:04:33', bn_datetime = '2010-02-10 02:04:33', bn_date = '2010-02-10', wr_ip = '220.74.48.215'
1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'path'] 자동세팅', wr_last = '2010-02-10 02:04:33', ' at line 10
error file : /bbs/scrap_popin_update.php
관리하시는분 살펴보세요.
스크랩은 안되고 저 위에 코멘트는 달려지네요.
저 코멘트는 스크랩창에서 적은 것인데...