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

common.php 를 졸라 쉽게 인클루드 하기

· 2년 전 · 3327 · 31

 

1. 우리가 그누에 새로운 페이지를 만들거나 등등 그누의 기본 환경을 사용하려면

반드시 그누루트에 있는 common.php 를 "상대경로"로 인클루드 해야 합니다.

 

2. 그런데 이럴 때마다 ../ 를 몇개 붙여야 할지 헷갈리고 더구나 모바일 스킨과 pc 스킨은 이게 한끗발이 차이가 나며 테마를 사용할 때라거나 여러가지 성가시고 귀찮은 점이 많아서 코드를 한번 만들어 보았습니다.

 

3, 코드를 보면 아시겠지만 현재의 위치에서 "adm", "bbs", "extend" 디렉토리가 존재한다면

그 위치의 common.php 를 인클루드하고

아니라면 한단계 위의 부모 디렉토리로 치고 올라가서 같은 작업을 수행하고...

계속 동일한 형태로 진행하다 결국 조건에 맞는 상황이 되면 드디어 common.php 를 인클루드하는 while 문으로 구성했습니다.

 

4. 만일 "adm", "bbs", "extend" 외에 더 엄밀성을 주고 싶다면 원하는 디렉토리를 본인의 의도만큼 배열 안으로 계속 넣어주면 되겠습니다.^^

 

[code]

<?php
function is_common($inc) {
    $root_dir = ["adm", "bbs", "extend"];
    $dir_count = 0;
    foreach ($root_dir as $g5_dir) if (is_dir($inc.$g5_dir)) $dir_count += 1;
    return $dir_count == count($root_dir);
}
if (is_common("./")) $common_include = "./common.php";
else {
    $parent_dir = "../";
    while (!is_common($parent_dir)) $parent_dir .= "../";
    $common_include = $parent_dir."common.php";
}
include_once($common_include);
?>

[/code]

댓글 작성

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

로그인하기

댓글 31개

2년 전
@jihan? 어이쿠 폰으로... 감사합니다
2년 전
전문가들 토론이 끝나셨나요? 최종버전 어떻게 되나요?

비 개발자이면서 설치 구조를 변경 안한다는 전제조건이라면 어떤 코드를 사용하면 좋을까요?
@호텔천사
[code]
include_once($_SERVER['DOCUMENT_ROOT'] . '/common.php');

// 하위 폴더에 설치했으면...
include_once($_SERVER['DOCUMENT_ROOT'] . '/하위폴더명/common.php');
[/code]

사실 이거면 되는데, 그누보드 자체나 플러그인 등에서는 호환성을 위해서 ../../../ 이렇게 굳이 찾아가는 거라서 배포할게 아니라면 위와 같이만 해도 됩니다.

@jihan? 간결하네요. 감사합니다.

2년 전
@호텔천사
원하는 걸 쓰심 되구요.
그래도 그냥 제것 쓰세요.ㅋ
제 코드가 그래도 ../ 로 구성된 소스니까요.
여차하면 함수없이 소스를 바꾸어서 사용해도 되구요.
그리고 사실 bbs, shop 등 일부 폴더 밑에서는 _common.php 파일에 일부 로직이 있고 이걸 include해야해서 /common.php 파일을 직접 include 하면 안되는 경우도 있죠.
결국은 _common.php를 찾던 루트의 common.php를 찾아서 ../로 타고 올라가는게 맞긴합니다.
2년 전
@jihan?
코딩하는 사람들은 거의 쓸일도 없고 원래 쓰는 방식보다 효과도 별로지만 그냥 맘이 땡겨서 만들어보는 경우가 많은 것 같아요.
이것도 ../ 를 사용하는게 제일 무난하지만 결국 이것저것 시도해 보는 일종의 호기심과 재미가 시간투자를 하게 만드니까요.
비타주리님 팁에서 힌트를 얻어 재미로 한번 만들어 보았습니다.
사용할 일이 없을 것 같긴 하지만, 가끔 ../../../ 갯수가 헷갈릴때가 있는데, 그때는 편해지겠지 싶네요.
$pos = __FILE__;
$path = array_filter(explode("/",$pos));
foreach($path as $val) {
$cut = array_pop($path);
$common_path = '/'.implode('/',$path).'/common.php';
if(file_exists($common_path)) { //common
include_once($common_path);
break;
}
}
2년 전
@메이드 뭐 방법이야 가지가지고 여튼 본인이 편한 재미용 소스는 하나씩 만들어 쓰면 되지요.
common 파일을 찾는 상황이야 어차피 배열과 루프문을 조합해서 빼는 거니까 본인이 제일 편한 방식으로요.
별것 아닌 팁에 메이드님까지 참여시켰으니 성공입니다.ㅋ
2년 전
감사 합니다.

게시글 목록

번호 제목
21184
21166
21157
21136
21132
21124
21119
21114
21106
21095
21069
21063
21060
21058
21053
21035
21032
21028
21009
21000
20994
20993
20984
20979
20958
20935
20934
20930
20913
20883