사이트 내 전체검색
[php] 다중 DB 서버 와 다중사이트의 관리 프로그램등의 Config 설정 과 라이브러리
로빈아빠
https://cmd.kr/server/1096 URL이 복사되었습니다.

본문

다중 DB 서버 와 다중사이트의 관리 프로그램등의 Config 설정 과 라이브러리

나자바
http://phpadvance.com

제가 1년 정도 사용한 방식입니다.
많은 사이트와 많은 DB 서버로 프로그램 하실때 유용하실겁니다.
소스는 제가 만든 라이브러리와 연동 되어지는 부분입니다..
아래 소스의 fDBSet() 을 참고하시면 됩니다..

////////////////////////////////////////////////////////////////////// 

### DB Servers Set 
$aDB["DB1"]["Host"]                                   = "localhost"; 
$aDB["DB1"]["User"]                                   = "user"; 
$aDB["DB1"]["Passwd"]                              = "password"; 

$aDB["DB2"]["Host"]                                   = "xxx.xxx.xxx.xxx"; 
$aDB["DB2"]["User"]                        = "user"; 
$aDB["DB2"]["Passwd"]                              = "password"; 

$aDB["DB3"]["Host"]                                   = "xxx.xxx.xxx.xxx"; 
$aDB["DB3"]["User"]                                   = "user"; 
$aDB["DB3"]["Passwd"]                              = "password"; 

$aDB["DB4"]["Host"]                                   = "xxx.xxx.xxx.xxx"; 
$aDB["DB4"]["User"]                                   = "user"; 
$aDB["DB4"]["Passwd"]                              = "password"; 

$aDB["DB5"]["Host"]                                   = "xxx.xxx.xxx.xxx"; 
$aDB["DB5"]["User"]                                   = "user"; 
$aDB["DB5"]["Passwd"]                              = "password"; 
### DB Servers Set End 

### Site Data Set 
$aSite[0]["Domain"]                        = "www.site1.com"; 
$aSite[0]["DBServer"]                        = "DB2"; ##Variable Indexing Key 
$aSite[0]["DB"]                        = "DBName"; 
$aSite[0]["Name"]                        = "SiteName"; 

$aSite[1]["Domain"]                        = "www.site2.com"; 
$aSite[1]["DBServer"]                        = "DB2"; ##Variable Indexing Key 
$aSite[1]["DB"]                        = "DBName"; 
$aSite[1]["Name"]                        = "SiteName"; 


<? 
####MySQL DB Query Library 
##작성자 : 나자바 
##작성일 : 2003-02 

class CMySQLLib{ 

        var $aDB = array( 
                                "Host"=>"", 
                                "User"=>"", 
                                "Passwd"=>"", 
                                "DB"=>"" 
                        ); 
                         
        function fDBSet(){ 
            global $aDB,$aSite; 
             
            $this->aDB["Host"] = $aDB[$aSite[0]["DBServer"]]["Host"]; 
            $this->aDB["User"] = $aDB[$aSite[0]["DBServer"]]["User"]; 
            $this->aDB["Passwd"] = $aDB[$aSite[0]["DBServer"]]["Passwd"]; 
            $this->aDB["DB"] = $aSite[0]["DB"]; 
            return true; 
        } 

        function fError($Sql=""){ 
                $Msg = "MySQL ErrorNo : ".mysql_errno(); 
                $Msg .= " <br> MySQL Error Message : ".mysql_error(); 
                $Msg .= "<br>Query String : ".$Sql; 
                $Msg .= "<br>Source Error File : ".basename(__FILE__); 
                $Msg .= "<br>Source Error Line : ".__LINE__; 
                $Msg .= "<br>PHP Error Source File : ".basename($GLOBALS[PHP_SELF]); 
                $Msg .= "<br> <a href='".$GLOBALS[HTTP_REFERER]."'>되돌아가기</a>"; 
                return $Msg; 
        } 

        function fDefaultConnect($Var="Conn"){ 
              $this->fDBSet(); 
              $this->$Var = @mysql_connect($this->aDB["Host"],$this->aDB["User"],$this->aDB["Passwd"]) or die($this->fError()); 
              return  @mysql_select_db($this->aDB["DB"]) or die($this->fError()); 
        } 

        function fConnect($Host,$User,$Passwd,$Var="Conn"){ 
                return $this->$Var = mysql_connect($Host,$User,$Passwd); 
        } 

        function fQuery($Sql,$Var="Res",$ConnVar="Conn"){ 
                if(!$this->$ConnVar){$this->fDefaultConnect($ConnVar);} 
                return $this->$Var = mysql_query($Sql) or die($this->fError($Sql)); 
        } 

        function fFetch($Res,$Var="Row"){ 
                return $this->$Var = ($Res) ? mysql_fetch_object($Res) : false; 
        } 

        function fNumRow($Res){ 
                return ($Res ) ? $ResNum = mysql_num_rows($Res) : 0 ; 
        } 

        function fClose($Var="Conn"){ 
                return ($this->$Var) ? mysql_close($this->$Var) : false ; 
        } 
         
}// CMySQLLib Class End!! 

/* 
클래스 설명 
    var $aDB 
    : 기본 DB정보가 들어 갑니다. fDefaultConnect($Var="Conn")에서 기본적으로 사용하는 변수입니다. 

    fDBSet() 
    : Config 파일을 참조하는 인위적인 함수입니다. 기본적으로 2차 배열로 각 DB 서버별로 설정할수 있습니다. 

    fError($Sql="") 
    : 에러 Reporting 입니다. 

    fDefaultConnect($Var="Conn") 
    : 기본적인 연결을 하는 함수 입니다.  fQuery($Sql,$Var="Res",$ConnVar="Conn"); 사용했을시 클래스내에 DB연결 결과값이 없을 경우 이 함수가 실행됩니다. 

    fConnect($Host,$User,$Passwd,$Var="Conn") 
    : 사용자 임의 연결 함수 입니다. 
    - $Var = 연결후 결과를 클래스내에 $Var 번지에다 저장됩니다. 
        Ex1) 


    fQuery($Sql,$Var="Res",$ConnVar="Conn"); 
    : mysql_query 를 실행후 $Var 를 클래스 내에 메모리에 저장됩니다. 
    - $Sql = 쿼리문 
    - $Var = 결과 변수지정 class 내에 메모리 번지생성. 
    - $ConnVar = Connect  Variable 클래스 내에 fDefaultConnect($Var="Conn")/fConnect($Host,$User,$Passwd,$Var="Conn") 
      생성한 변수를 적음 없을경우 default 로 $this->Conn 을 참조 합니다. 
         
        Ex1)$this->fQuery("select * from ...","ResMember"); 
        Ex2)$this->fQuery("select * from ...","ResMember"); 
        Ex3)$this->fQuery("select * from ...","ResMember","Conn3"); 
     
    fFetch($Res,$Var="Row"); 
    : mysql_fetch_object 를 실행후 $Var 값으로 리턴 됩니다.. 
    - $Res = 쿼리 후 리턴 된 값입니다. 
    - $Var = 결과값을 기본적으로 클래스 내에  Row 메모리번지에 오브젝트가 저장됩니다. 설정시 설정 번지에 저장함. 
     
        Ex1)$this->fFetch($this->Res); 
        Ex2)$this->fFetch($this->Res2,"MemberRow"); 

    fNumRow($Res); 
    : mysql_num_rows 를 실행합니다, 쿼리 결과 갯수를 리턴 합니다. 
    - $Res = 쿼리 후 리턴된 값입니다. 

        Ex1) $Num = $this->fNumRow($this->Res); 

    fClose($Var="Conn") 
    : DB 서버를 닫습니다. 
    - $Var = DB 접속한 클래스 내에 Connect 결과 번지 입니다. 

        Ex1) $this->fClose($this->Conn); 
*/ 
?> 

 
나자바 이해를 돕기 위해서 추가 설명을 하겠습니다.
위에 라이브러리는 특별한것은 없습니다..
단지,
$aDB,$aSite 의 설정단계와 실행하는 단계에서의 설정을 들수 있는데요.
응용을 한다면,
예제1) 전체사이트의 결제금액을 구해라[단, 결제 테이블은 동일하다.] 일때,
for($i=0; $i<count($aSite); $i++){ 
@mysql_connect($aDB[$aSite[$i]["DBServer"]]["Host"],$aDB[$aSite[$i]["DBServer"]]["User"],$aDB[$aSite[$i]["DBServer"]]["Passwd"]); 
##쿼리 처리 
##꿔리 처리끝 
} 


위와 같은형식으로 처리할 수 있습니다..
많은 사이트의 프로그램 처리가 가능하며,
DB 서버의 이동이 있을시..
$aSite[0]["DBServer"] = "DB2"; ##Variable Indexing Key


위에 부분을 원하는 DB서버로 변경하면 됩니다.
DB1 번서버로 변경했을때
$aSite[0]["DBServer"] = "DB1"; ##Variable Indexing Key 


이런부분이 사이트들의 관리상 많이 유용하게 쓰입니다..

댓글목록

등록된 댓글이 없습니다.

1,139 (8/23P)

Search

Copyright © Cmd 명령어 18.221.25.217