같은 계정내에서는 경로가 달라도 $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']에 아무값도 안지정되는 경우를 . 으로 지정되게 수정하였습니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 19개
고민을 한방에 해결해 주셨습니다.^^
//$tmp_path .= '../';
$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 = './';
을 추가했습니다.
현재 실행되는 파일의 디렉토리 경로가 그누보드 설치 디렉토리에 포함되는 경우에
./ 부터 시작되도록 수정한것입니다.
깊이 감사 드립니다.
그누보드의 기본 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를 거치는 방식은 동작하지 않는점은 저같은 초보입장에서 적용시 주의해야할 사항으로 보입니다.
보안을 위해 애써주신 막강팁인데 외부연동 관련 코멘트로 도배해서 죄송합니다.
거듭 감사의 말씀 올립니다.
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
관리하시는분 살펴보세요.
스크랩은 안되고 저 위에 코멘트는 달려지네요.
저 코멘트는 스크랩창에서 적은 것인데...