그누보드 튜닝 (common.php 에서) 약간의 Tips 정보
그누보드 튜닝 (common.php 에서) 약간의 Tips
관련링크
본문
아빠불당님께서 common.php을 튜닝한 것과는 조금 다른 내용입니다. php에 대해서는 많이 모르기 때문에 조언주시면 감사하게 받겠습니다. ^^
출처 : http://stnzone.com/gboard/blog/?id=359
그누보드에 있는 common.php 는 사이트에 접속할 때, 글을 읽을 때마다 호출되는 코드로 최대한 최적화시켜 주는 것이 좋다.
기존코드
if (file_exists("$g4[path]/$dbconfig_file"))
{
if (is_dir("$g4[path]/install")) die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('install 디렉토리를 삭제하여야 정상 실행됩니다.'); </script>");
include_once("$g4[path]/$dbconfig_file");
$connect_db = sql_connect($mysql_host, $mysql_user, $mysql_password);
$select_db = sql_select_db($mysql_db, $connect_db);
if (!$select_db)
die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('DB 접속 오류'); </script>");
}
else
{
echo "<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'>";
echo <<<HEREDOC
<script language="JavaScript">
alert("DB 설정 파일이 존재하지 않습니다.\\n\\n프로그램 설치 후 실행하시기 바랍니다.");
location.href = "./install/";
</script>
HEREDOC;
exit;
}
if (file_exists("$g4[path]/$dbconfig_file"))
{
if (is_dir("$g4[path]/install")) die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('install 디렉토리를 삭제하여야 정상 실행됩니다.'); </script>");
include_once("$g4[path]/$dbconfig_file");
$connect_db = sql_connect($mysql_host, $mysql_user, $mysql_password);
$select_db = sql_select_db($mysql_db, $connect_db);
if (!$select_db)
die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('DB 접속 오류'); </script>");
}
else
{
echo "<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'>";
echo <<<HEREDOC
<script language="JavaScript">
alert("DB 설정 파일이 존재하지 않습니다.\\n\\n프로그램 설치 후 실행하시기 바랍니다.");
location.href = "./install/";
</script>
HEREDOC;
exit;
}
기존 코드를 다음과 같이 변경한다.
// neojzs : 최적화
include_once("$g4[path]/$dbconfig_file");
$connect_db = sql_connect($mysql_host, $mysql_user, $mysql_password);
$select_db = sql_select_db($mysql_db, $connect_db);
if (!$select_db)
die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('DB 접속 오류'); </script>");
include_once("$g4[path]/$dbconfig_file");
$connect_db = sql_connect($mysql_host, $mysql_user, $mysql_password);
$select_db = sql_select_db($mysql_db, $connect_db);
if (!$select_db)
die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('DB 접속 오류'); </script>");
즉, 매번 db컨피그화일이 있는지 검사하지 않게 한다. 왜냐하면 그누보드가 인스톨되어 있다면 당연히 있는 것이므로..
또한, 접근가능 IP와 접근차단 IP는 다음과 같이 처리해 주는 것이 좋다.
기존코드
// 접근가능 IP
$cf_possible_ip = trim($config['cf_possible_ip']);
if ($cf_possible_ip) {
$is_possible_ip = false;
$pattern = explode("\n", $cf_possible_ip);
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
//$pat = "/({$pattern[$i]})/";
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_possible_ip)
break;
}
if (!$is_possible_ip)
die ("접근이 가능하지 않습니다.");
}
// 접근가능 IP
$cf_possible_ip = trim($config['cf_possible_ip']);
if ($cf_possible_ip) {
$is_possible_ip = false;
$pattern = explode("\n", $cf_possible_ip);
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
//$pat = "/({$pattern[$i]})/";
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_possible_ip)
break;
}
if (!$is_possible_ip)
die ("접근이 가능하지 않습니다.");
}
// neojzs 최적화
$is_possible_ip = true;
if($config['cf_possible_ip'])
{
$cf_possible_ip = trim($config['cf_possible_ip']);
if ($cf_possible_ip) {
$is_possible_ip = false;
$pattern = explode("\n", $cf_possible_ip);
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
//$pat = "/({$pattern[$i]})/";
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_possible_ip)
break;
}
if (!$is_possible_ip)
die ("접근이 가능하지 않습니다.");
}
}
$is_possible_ip = true;
if($config['cf_possible_ip'])
{
$cf_possible_ip = trim($config['cf_possible_ip']);
if ($cf_possible_ip) {
$is_possible_ip = false;
$pattern = explode("\n", $cf_possible_ip);
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
//$pat = "/({$pattern[$i]})/";
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_possible_ip)
break;
}
if (!$is_possible_ip)
die ("접근이 가능하지 않습니다.");
}
}
기존코드
// 접근차단 IP
$is_intercept_ip = false;
$pattern = explode("\n", trim($config['cf_intercept_ip']));
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_intercept_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_intercept_ip)
// 접근차단 IP
$is_intercept_ip = false;
$pattern = explode("\n", trim($config['cf_intercept_ip']));
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_intercept_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_intercept_ip)
// 접근차단 IP
$is_intercept_ip = false;
// neojzs 최적화
if($config['cf_intercept_ip'])
{
$pattern = explode("\n", trim($config['cf_intercept_ip']));
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_intercept_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_intercept_ip)
die ("접근 불가합니다.");
}
}
$is_intercept_ip = false;
// neojzs 최적화
if($config['cf_intercept_ip'])
{
$pattern = explode("\n", trim($config['cf_intercept_ip']));
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if (empty($pattern[$i]))
continue;
$pattern[$i] = str_replace(".", "\.", $pattern[$i]);
$pat = "/^{$pattern[$i]}/";
$is_intercept_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
if ($is_intercept_ip)
die ("접근 불가합니다.");
}
}
즉, 데이타가 있을 때만 검사하는 형태로 처리하는 것이다.
또한, common.php 파일을 수정할 필요가 없도록 확장하는 코드는 차라리 필요할 때마다 수정하는 것이 부하에 훨씬 좋다.
기존코드
// common.php 파일을 수정할 필요가 없도록 확장합니다.
$tmp = dir("$g4[path]/extend");
while ($entry = $tmp->read()) {
// php 파일만 include 함
if (preg_match("/(\.php)$/i", $entry))
include_once("$g4[path]/extend/$entry");
}
// common.php 파일을 수정할 필요가 없도록 확장합니다.
$tmp = dir("$g4[path]/extend");
while ($entry = $tmp->read()) {
// php 파일만 include 함
if (preg_match("/(\.php)$/i", $entry))
include_once("$g4[path]/extend/$entry");
}
// common.php 파일을 수정할 필요가 없도록 확장합니다.
// neojzs 최적화
/*
$tmp = dir("$g4[path]/extend");
while ($entry = $tmp->read()) {
// php 파일만 include 함
if (preg_match("/(\.php)$/i", $entry))
include_once("$g4[path]/extend/$entry");
}
*/
// 필요한 것만 include시켜준다
include_once("$g4[path]/extend/index.php");
include_once("$g4[path]/extend/gblog.extend.php");
include_once("$g4[path]/extend/gnutalk.extend.php");
// neojzs 최적화
/*
$tmp = dir("$g4[path]/extend");
while ($entry = $tmp->read()) {
// php 파일만 include 함
if (preg_match("/(\.php)$/i", $entry))
include_once("$g4[path]/extend/$entry");
}
*/
// 필요한 것만 include시켜준다
include_once("$g4[path]/extend/index.php");
include_once("$g4[path]/extend/gblog.extend.php");
include_once("$g4[path]/extend/gnutalk.extend.php");
추천
2
2
댓글 13개
감사합니다. 미처 생각하지 못했던 부분을 최적화 시켜주셨네요.

^^ 아빠불당님의 최적화팁에 많은 도움을 받고 있습니다. 저역시 감사드립니다.

login, visit 테이블도 사용하지 않으면 매우 빨라집니다.
매번 쿼리를 날리니... ㅎㅎ
매번 쿼리를 날리니... ㅎㅎ
접근차단아이피에 관한 팁은 적용을 하니 홈페이지가 안뜨게 되요; 제가 뭘 잘못적용한걸까요;

전 아예 그 기능을 주석처리 해버렸습니다. ㅋㅋ

수정하는 코드에서 괄호를 잘 보세요.
extend 디렉토리의 index.php는 include하지 않아도 됩니다. 빈 파일 입니다.
include_once("$g4[path]/extend/index.php");
include_once("$g4[path]/extend/index.php");

아.. 그렇군요. ^^
좋은 팁...감사합니다...

넵 ^^

좋은 팁 감사합니다..^^
다만, 그누보드 업그레이드시에는 작업량이 좀 더 늘겠군요...
다만, 그누보드 업그레이드시에는 작업량이 좀 더 늘겠군요...

g5쯤에서는 게시판을 테이블 하나로 통합했으면 합니다.
그러면 더 다양한 기능을 손 쉽게 구현할 수 있을 겁니다.
그러면 더 다양한 기능을 손 쉽게 구현할 수 있을 겁니다.
정말 감사합니다.